tests: check for proper cookie being set in response

This commit is contained in:
Stevan Freeborn
2026-02-03 21:04:25 -06:00
parent 21d23be2ef
commit 453aa3264d
@@ -2,6 +2,8 @@ namespace FiscalOS.API.Tests.Integration;
public class LoginTests(TestApi testApi) : IntegrationTest(testApi) public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
{ {
private static readonly Uri LoginUri = new("/login", UriKind.Relative);
[Theory] [Theory]
[ClassData<LoginValidationTestCases>] [ClassData<LoginValidationTestCases>]
public async Task Login_WhenUserSubmitsInvalidRequest_ItShouldReturn400WithProblemDetails(LoginValidationTestCase tc) public async Task Login_WhenUserSubmitsInvalidRequest_ItShouldReturn400WithProblemDetails(LoginValidationTestCase tc)
@@ -12,7 +14,7 @@ public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
password = tc.Password, password = tc.Password,
}; };
var res = await Client.PostAsJsonAsync("/login", req, TestContext.Current.CancellationToken); var res = await Client.PostAsJsonAsync(LoginUri, req, TestContext.Current.CancellationToken);
res.StatusCode.Should().Be(HttpStatusCode.BadRequest); res.StatusCode.Should().Be(HttpStatusCode.BadRequest);
@@ -30,7 +32,7 @@ public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
password = "@Password2", password = "@Password2",
}; };
var res = await Client.PostAsJsonAsync("/login", req, TestContext.Current.CancellationToken); var res = await Client.PostAsJsonAsync(LoginUri, req, TestContext.Current.CancellationToken);
res.StatusCode.Should().Be(HttpStatusCode.Unauthorized); res.StatusCode.Should().Be(HttpStatusCode.Unauthorized);
} }
@@ -53,13 +55,13 @@ public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
password = "@Password2", password = "@Password2",
}; };
var res = await Client.PostAsJsonAsync("/login", req, TestContext.Current.CancellationToken); var res = await Client.PostAsJsonAsync(LoginUri, req, TestContext.Current.CancellationToken);
res.StatusCode.Should().Be(HttpStatusCode.Unauthorized); res.StatusCode.Should().Be(HttpStatusCode.Unauthorized);
} }
[Fact] [Fact]
public async Task Login_WhenUserExistsAndPasswordIsCorrect_ItShouldReturn200WithJwtToken() public async Task Login_WhenUserExistsAndPasswordIsCorrect_ItShouldReturn200WithJwtTokenAndSetRefreshCookie()
{ {
await ExecuteDbContextAsync(static async (context, sp) => await ExecuteDbContextAsync(static async (context, sp) =>
{ {
@@ -76,18 +78,20 @@ public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
password = "@Password1", password = "@Password1",
}; };
var res = await Client.PostAsJsonAsync("/login", req, TestContext.Current.CancellationToken); var res = await Client.PostAsJsonAsync(LoginUri, req, TestContext.Current.CancellationToken);
res.StatusCode.Should().Be(HttpStatusCode.OK); res.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await res.Content.ReadFromJsonAsync<Login.Response>(TestContext.Current.CancellationToken); var content = await res.Content.ReadFromJsonAsync<Login.Response>(TestContext.Current.CancellationToken);
content!.AccessToken.Should().NotBeNullOrEmpty(); content!.AccessToken.Should().NotBeNullOrEmpty();
res.Headers.TryGetValues("Set-Cookie", out var cookies).Should().BeTrue(); res.Headers.TryGetValues("Set-Cookie", out var cookies).Should().BeTrue();
cookies.Should().NotBeNull(); var hasRefreshTokenCookie = cookies!
.Any(static c => c.StartsWith("fiscalos_refresh_cookie=", StringComparison.OrdinalIgnoreCase));
hasRefreshTokenCookie.Should().BeTrue();
} }
} }