From 8002e2d50d3ea06e07fe1d5942d5248b48590548 Mon Sep 17 00:00:00 2001 From: aestene Date: Fri, 24 Jan 2025 10:05:59 +0100 Subject: [PATCH 1/2] Add a test for list definitions endpoint --- .../MissionDefinitionControllerTests.cs | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 backend/api.test/Controllers/MissionDefinitionControllerTests.cs diff --git a/backend/api.test/Controllers/MissionDefinitionControllerTests.cs b/backend/api.test/Controllers/MissionDefinitionControllerTests.cs new file mode 100644 index 00000000..2027800a --- /dev/null +++ b/backend/api.test/Controllers/MissionDefinitionControllerTests.cs @@ -0,0 +1,84 @@ +using System.Collections.Generic; +using System.Net.Http; +using System.Net.Http.Json; +using System.Text.Json; +using System.Threading.Tasks; +using Api.Controllers.Models; +using Api.Database.Models; +using Api.Services; +using Api.Test.Database; +using Microsoft.Extensions.DependencyInjection; +using Testcontainers.PostgreSql; +using Xunit; + +namespace Api.Test.Controllers +{ + public class MissionDefinitionControllerTests : IAsyncLifetime + { + public required DatabaseUtilities DatabaseUtilities; + public required PostgreSqlContainer Container; + public required HttpClient Client; + public required JsonSerializerOptions SerializerOptions; + + public required IMissionDefinitionService MissionDefinitionService; + public required ISourceService SourceService; + + public async Task InitializeAsync() + { + (Container, string connectionString, var connection) = + await TestSetupHelpers.ConfigurePostgreSqlDatabase(); + var factory = TestSetupHelpers.ConfigureWebApplicationFactory( + postgreSqlConnectionString: connectionString + ); + var serviceProvider = TestSetupHelpers.ConfigureServiceProvider(factory); + + Client = TestSetupHelpers.ConfigureHttpClient(factory); + SerializerOptions = TestSetupHelpers.ConfigureJsonSerializerOptions(); + + DatabaseUtilities = new DatabaseUtilities( + TestSetupHelpers.ConfigurePostgreSqlContext(connectionString) + ); + + MissionDefinitionService = + serviceProvider.GetRequiredService(); + SourceService = serviceProvider.GetRequiredService(); + } + + public async Task DisposeAsync() => await Task.CompletedTask; + + [Fact] + public async Task CheckThatListAllMissionDefinitionsEndpointReturnsSuccess() + { + // Arrange + var installation = await DatabaseUtilities.NewInstallation(); + var plant = await DatabaseUtilities.NewPlant(installation.InstallationCode); + var inspectionArea = await DatabaseUtilities.NewInspectionArea( + installation.InstallationCode, + plant.PlantCode + ); + + var source = await SourceService.CreateSourceIfDoesNotExist([]); + + var missionDefinition = new MissionDefinition() + { + Source = source, + InstallationCode = installation.InstallationCode, + Name = "Test Mission Definition", + InspectionArea = inspectionArea, + IsDeprecated = false, + }; + + _ = await MissionDefinitionService.Create(missionDefinition); + + // Act + var response = await Client.GetAsync("missions/definitions"); + + // Assert + var missionDefinitions = await response.Content.ReadFromJsonAsync< + List + >(SerializerOptions); + + Assert.Single(missionDefinitions!); + } + } +} From 42c52fbce315f4dab9cdbda03c05a5ed63d7cc44 Mon Sep 17 00:00:00 2001 From: aestene Date: Fri, 24 Jan 2025 10:26:10 +0100 Subject: [PATCH 2/2] Add test for empty mission definitions list --- .../Controllers/MissionDefinitionControllerTests.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/backend/api.test/Controllers/MissionDefinitionControllerTests.cs b/backend/api.test/Controllers/MissionDefinitionControllerTests.cs index 2027800a..2ce0ae30 100644 --- a/backend/api.test/Controllers/MissionDefinitionControllerTests.cs +++ b/backend/api.test/Controllers/MissionDefinitionControllerTests.cs @@ -80,5 +80,17 @@ public async Task CheckThatListAllMissionDefinitionsEndpointReturnsSuccess() Assert.Single(missionDefinitions!); } + + [Fact] + public async Task CheckThatListAllMissionDefinitionsSucceedWhenThereAreNoMissionDefinitions() + { + var response = await Client.GetAsync("missions/definitions"); + + var missionDefinitions = await response.Content.ReadFromJsonAsync< + List + >(SerializerOptions); + + Assert.Empty(missionDefinitions!); + } } }