From 38a03f56cac3286a74e265e05c6a56c541594305 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Mon, 2 Feb 2026 04:49:00 -0600 Subject: [PATCH] tests: refactor test suite to match new project structure --- .../FiscalOS.API.Tests.csproj | 2 ++ tests/FiscalOS.API.Tests/Infra/TestApi.cs | 6 ------ .../Integration/IntegrationTest.cs | 14 +++++++++++++ .../Integration/LoginTests.cs | 7 +++++-- tests/FiscalOS.API.Tests/Usings.cs | 4 +++- .../FiscalOS.Infra.Tests.csproj | 21 +++++++++++++++++++ .../Unit/PasswordHasherTests.cs | 4 +--- tests/FiscalOS.Infra.Tests/Usings.cs | 1 + tests/FiscalOS.Infra.Tests/xunit.runner.json | 3 +++ 9 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 tests/FiscalOS.Infra.Tests/FiscalOS.Infra.Tests.csproj rename tests/{FiscalOS.API.Tests => FiscalOS.Infra.Tests}/Unit/PasswordHasherTests.cs (93%) create mode 100644 tests/FiscalOS.Infra.Tests/Usings.cs create mode 100644 tests/FiscalOS.Infra.Tests/xunit.runner.json diff --git a/tests/FiscalOS.API.Tests/FiscalOS.API.Tests.csproj b/tests/FiscalOS.API.Tests/FiscalOS.API.Tests.csproj index 409f525..949d3d8 100644 --- a/tests/FiscalOS.API.Tests/FiscalOS.API.Tests.csproj +++ b/tests/FiscalOS.API.Tests/FiscalOS.API.Tests.csproj @@ -17,6 +17,8 @@ + + diff --git a/tests/FiscalOS.API.Tests/Infra/TestApi.cs b/tests/FiscalOS.API.Tests/Infra/TestApi.cs index a5d46f3..8ee18b4 100644 --- a/tests/FiscalOS.API.Tests/Infra/TestApi.cs +++ b/tests/FiscalOS.API.Tests/Infra/TestApi.cs @@ -1,9 +1,3 @@ -using FiscalOS.API.Data; - -using Microsoft.AspNetCore.TestHost; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; - namespace FiscalOS.API.Tests.Infra; public class TestApi : WebApplicationFactory diff --git a/tests/FiscalOS.API.Tests/Integration/IntegrationTest.cs b/tests/FiscalOS.API.Tests/Integration/IntegrationTest.cs index 52cb7be..dd89de9 100644 --- a/tests/FiscalOS.API.Tests/Integration/IntegrationTest.cs +++ b/tests/FiscalOS.API.Tests/Integration/IntegrationTest.cs @@ -19,6 +19,13 @@ public abstract class IntegrationTest(TestApi testApi) : IClassFixture, await action(context); } + protected async Task ExecuteDbContextAsync(Func action) + { + await using var scope = testApi.Services.CreateAsyncScope(); + var context = scope.ServiceProvider.GetRequiredService(); + await action(context, scope.ServiceProvider); + } + protected async Task ExecuteDbContextAsync(Func> action) { await using var scope = testApi.Services.CreateAsyncScope(); @@ -26,6 +33,13 @@ public abstract class IntegrationTest(TestApi testApi) : IClassFixture, return await action(context); } + protected async Task ExecuteDbContextAsync(Func> action) + { + await using var scope = testApi.Services.CreateAsyncScope(); + var context = scope.ServiceProvider.GetRequiredService(); + return await action(context, scope.ServiceProvider); + } + public async ValueTask DisposeAsync() { await ExecuteDbContextAsync(static async context => diff --git a/tests/FiscalOS.API.Tests/Integration/LoginTests.cs b/tests/FiscalOS.API.Tests/Integration/LoginTests.cs index 06dd386..e34dd8d 100644 --- a/tests/FiscalOS.API.Tests/Integration/LoginTests.cs +++ b/tests/FiscalOS.API.Tests/Integration/LoginTests.cs @@ -1,4 +1,4 @@ -using FiscalOS.API.Identity; +using FiscalOS.Core.Identity; namespace FiscalOS.API.Tests.Integration; @@ -40,11 +40,14 @@ public class LoginTests(TestApi testApi) : IntegrationTest(testApi) [Fact] public async Task Login_WhenUserExistsButPasswordIsIncorrect_ItShouldReturn401WithProblemDetails() { - await ExecuteDbContextAsync(static async context => + await ExecuteDbContextAsync(static async (context, sp) => { + var passwordHasher = sp.GetRequiredService(); + context.Add(new User { Username = "Stevan", + HashedPassword = passwordHasher.Hash("@Password1"), }); await context.SaveChangesAsync(TestContext.Current.CancellationToken); diff --git a/tests/FiscalOS.API.Tests/Usings.cs b/tests/FiscalOS.API.Tests/Usings.cs index 9f763fe..aa25f2f 100644 --- a/tests/FiscalOS.API.Tests/Usings.cs +++ b/tests/FiscalOS.API.Tests/Usings.cs @@ -1,14 +1,16 @@ global using System.Net; global using System.Net.Http.Json; -global using FiscalOS.API.Data; global using FiscalOS.API.Tests.Infra; +global using FiscalOS.Infra.Data; global using Microsoft.AspNetCore.Hosting; global using Microsoft.AspNetCore.Mvc; global using Microsoft.AspNetCore.Mvc.Testing; +global using Microsoft.AspNetCore.TestHost; global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.Extensions.Logging; +global using Microsoft.Extensions.Options; global using Xunit.Sdk; \ No newline at end of file diff --git a/tests/FiscalOS.Infra.Tests/FiscalOS.Infra.Tests.csproj b/tests/FiscalOS.Infra.Tests/FiscalOS.Infra.Tests.csproj new file mode 100644 index 0000000..1f791bc --- /dev/null +++ b/tests/FiscalOS.Infra.Tests/FiscalOS.Infra.Tests.csproj @@ -0,0 +1,21 @@ + + + + Exe + FiscalOS.Infra.Tests + + + + + + + + + + + + + + + + diff --git a/tests/FiscalOS.API.Tests/Unit/PasswordHasherTests.cs b/tests/FiscalOS.Infra.Tests/Unit/PasswordHasherTests.cs similarity index 93% rename from tests/FiscalOS.API.Tests/Unit/PasswordHasherTests.cs rename to tests/FiscalOS.Infra.Tests/Unit/PasswordHasherTests.cs index 2703bd0..19f9de7 100644 --- a/tests/FiscalOS.API.Tests/Unit/PasswordHasherTests.cs +++ b/tests/FiscalOS.Infra.Tests/Unit/PasswordHasherTests.cs @@ -1,6 +1,4 @@ -using FiscalOS.API.Identity; - -namespace FiscalOS.API.Tests.Unit; +namespace FiscalOS.Infra.Tests.Unit; public class PasswordHasherTests { diff --git a/tests/FiscalOS.Infra.Tests/Usings.cs b/tests/FiscalOS.Infra.Tests/Usings.cs new file mode 100644 index 0000000..9082166 --- /dev/null +++ b/tests/FiscalOS.Infra.Tests/Usings.cs @@ -0,0 +1 @@ +global using FiscalOS.Infra.Identity; \ No newline at end of file diff --git a/tests/FiscalOS.Infra.Tests/xunit.runner.json b/tests/FiscalOS.Infra.Tests/xunit.runner.json new file mode 100644 index 0000000..86c7ea0 --- /dev/null +++ b/tests/FiscalOS.Infra.Tests/xunit.runner.json @@ -0,0 +1,3 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json" +}