Skip to content

Commit cda6f08

Browse files
committed
Add mission loader tests
1 parent f8b280b commit cda6f08

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
using System.Collections.Generic;
2+
using System.Net;
3+
using System.Net.Http;
4+
using System.Net.Http.Json;
5+
using System.Text.Json;
6+
using System.Threading.Tasks;
7+
using Api.Services.MissionLoaders;
8+
using Testcontainers.PostgreSql;
9+
using Xunit;
10+
11+
namespace Api.Test.Controllers;
12+
13+
public class MissionLoaderControllerTests : IAsyncLifetime
14+
{
15+
public required PostgreSqlContainer Container;
16+
public required HttpClient Client;
17+
public required HttpClient UnauthenticatedClient;
18+
public required JsonSerializerOptions SerializerOptions;
19+
20+
public async ValueTask InitializeAsync()
21+
{
22+
(Container, var connectionString, _) = await TestSetupHelpers.ConfigurePostgreSqlDatabase();
23+
24+
var factory = TestSetupHelpers.ConfigureWebApplicationFactory(
25+
postgreSqlConnectionString: connectionString
26+
);
27+
var unauthFactory = TestSetupHelpers.ConfigureUnauthenticatedWebApplicationFactory(
28+
postgreSqlConnectionString: connectionString
29+
);
30+
31+
Client = TestSetupHelpers.ConfigureHttpClient(factory);
32+
UnauthenticatedClient = TestSetupHelpers.ConfigureUnauthenticatedHttpClient(unauthFactory);
33+
SerializerOptions = TestSetupHelpers.ConfigureJsonSerializerOptions();
34+
}
35+
36+
public ValueTask DisposeAsync()
37+
{
38+
return ValueTask.CompletedTask;
39+
}
40+
41+
[Fact]
42+
public async Task GetAvailableMissionsReturnsOkWithMissionsList()
43+
{
44+
// Act
45+
var response = await Client.GetAsync(
46+
"/mission-loader/available-missions/TTT",
47+
TestContext.Current.CancellationToken
48+
);
49+
var missions = await response.Content.ReadFromJsonAsync<List<CondensedMissionDefinition>>(
50+
SerializerOptions,
51+
cancellationToken: TestContext.Current.CancellationToken
52+
);
53+
54+
// Assert
55+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
56+
Assert.NotNull(missions);
57+
Assert.Single(missions);
58+
Assert.Equal("TTT", missions[0].InstallationCode);
59+
Assert.Equal("test", missions[0].Name);
60+
}
61+
62+
[Fact]
63+
public async Task GetMissionByIdReturnsOkWithMission()
64+
{
65+
// Act
66+
var response = await Client.GetAsync(
67+
"/mission-loader/missions/test-mission-id",
68+
TestContext.Current.CancellationToken
69+
);
70+
var mission = await response.Content.ReadFromJsonAsync<CondensedMissionDefinition>(
71+
SerializerOptions,
72+
cancellationToken: TestContext.Current.CancellationToken
73+
);
74+
75+
// Assert
76+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
77+
Assert.NotNull(mission);
78+
Assert.Equal("TTT", mission.InstallationCode);
79+
Assert.Equal("test", mission.Name);
80+
}
81+
82+
[Fact]
83+
public async Task GetAvailableMissionsUnauthenticatedUserReturnsUnauthorized()
84+
{
85+
// Act
86+
var response = await UnauthenticatedClient.GetAsync(
87+
"/mission-loader/available-missions/TTT",
88+
TestContext.Current.CancellationToken
89+
);
90+
91+
// Assert
92+
Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
93+
}
94+
95+
[Fact]
96+
public async Task GetMissionByIdUnauthenticatedUserReturnsUnauthorized()
97+
{
98+
// Act
99+
var response = await UnauthenticatedClient.GetAsync(
100+
"/mission-loader/missions/test-mission-id",
101+
TestContext.Current.CancellationToken
102+
);
103+
104+
// Assert
105+
Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
106+
}
107+
}

0 commit comments

Comments
 (0)