tests: refactor test suite to match new project structure
This commit is contained in:
@@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\FiscalOS.API\FiscalOS.API.csproj" />
|
<ProjectReference Include="..\..\src\FiscalOS.API\FiscalOS.API.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\FiscalOS.Core\FiscalOS.Core.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\FiscalOS.Infra\FiscalOS.Infra.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -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;
|
namespace FiscalOS.API.Tests.Infra;
|
||||||
|
|
||||||
public class TestApi : WebApplicationFactory<Program>
|
public class TestApi : WebApplicationFactory<Program>
|
||||||
|
|||||||
@@ -19,6 +19,13 @@ public abstract class IntegrationTest(TestApi testApi) : IClassFixture<TestApi>,
|
|||||||
await action(context);
|
await action(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected async Task ExecuteDbContextAsync(Func<DbContext, IServiceProvider, Task> action)
|
||||||
|
{
|
||||||
|
await using var scope = testApi.Services.CreateAsyncScope();
|
||||||
|
var context = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
||||||
|
await action(context, scope.ServiceProvider);
|
||||||
|
}
|
||||||
|
|
||||||
protected async Task<T> ExecuteDbContextAsync<T>(Func<DbContext, Task<T>> action)
|
protected async Task<T> ExecuteDbContextAsync<T>(Func<DbContext, Task<T>> action)
|
||||||
{
|
{
|
||||||
await using var scope = testApi.Services.CreateAsyncScope();
|
await using var scope = testApi.Services.CreateAsyncScope();
|
||||||
@@ -26,6 +33,13 @@ public abstract class IntegrationTest(TestApi testApi) : IClassFixture<TestApi>,
|
|||||||
return await action(context);
|
return await action(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected async Task<T> ExecuteDbContextAsync<T>(Func<DbContext, IServiceProvider, Task<T>> action)
|
||||||
|
{
|
||||||
|
await using var scope = testApi.Services.CreateAsyncScope();
|
||||||
|
var context = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
||||||
|
return await action(context, scope.ServiceProvider);
|
||||||
|
}
|
||||||
|
|
||||||
public async ValueTask DisposeAsync()
|
public async ValueTask DisposeAsync()
|
||||||
{
|
{
|
||||||
await ExecuteDbContextAsync(static async context =>
|
await ExecuteDbContextAsync(static async context =>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using FiscalOS.API.Identity;
|
using FiscalOS.Core.Identity;
|
||||||
|
|
||||||
namespace FiscalOS.API.Tests.Integration;
|
namespace FiscalOS.API.Tests.Integration;
|
||||||
|
|
||||||
@@ -40,11 +40,14 @@ public class LoginTests(TestApi testApi) : IntegrationTest(testApi)
|
|||||||
[Fact]
|
[Fact]
|
||||||
public async Task Login_WhenUserExistsButPasswordIsIncorrect_ItShouldReturn401WithProblemDetails()
|
public async Task Login_WhenUserExistsButPasswordIsIncorrect_ItShouldReturn401WithProblemDetails()
|
||||||
{
|
{
|
||||||
await ExecuteDbContextAsync(static async context =>
|
await ExecuteDbContextAsync(static async (context, sp) =>
|
||||||
{
|
{
|
||||||
|
var passwordHasher = sp.GetRequiredService<IPasswordHasher>();
|
||||||
|
|
||||||
context.Add(new User
|
context.Add(new User
|
||||||
{
|
{
|
||||||
Username = "Stevan",
|
Username = "Stevan",
|
||||||
|
HashedPassword = passwordHasher.Hash("@Password1"),
|
||||||
});
|
});
|
||||||
|
|
||||||
await context.SaveChangesAsync(TestContext.Current.CancellationToken);
|
await context.SaveChangesAsync(TestContext.Current.CancellationToken);
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
global using System.Net;
|
global using System.Net;
|
||||||
global using System.Net.Http.Json;
|
global using System.Net.Http.Json;
|
||||||
|
|
||||||
global using FiscalOS.API.Data;
|
|
||||||
global using FiscalOS.API.Tests.Infra;
|
global using FiscalOS.API.Tests.Infra;
|
||||||
|
global using FiscalOS.Infra.Data;
|
||||||
|
|
||||||
global using Microsoft.AspNetCore.Hosting;
|
global using Microsoft.AspNetCore.Hosting;
|
||||||
global using Microsoft.AspNetCore.Mvc;
|
global using Microsoft.AspNetCore.Mvc;
|
||||||
global using Microsoft.AspNetCore.Mvc.Testing;
|
global using Microsoft.AspNetCore.Mvc.Testing;
|
||||||
|
global using Microsoft.AspNetCore.TestHost;
|
||||||
global using Microsoft.EntityFrameworkCore;
|
global using Microsoft.EntityFrameworkCore;
|
||||||
global using Microsoft.Extensions.DependencyInjection;
|
global using Microsoft.Extensions.DependencyInjection;
|
||||||
global using Microsoft.Extensions.Logging;
|
global using Microsoft.Extensions.Logging;
|
||||||
|
global using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
global using Xunit.Sdk;
|
global using Xunit.Sdk;
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>FiscalOS.Infra.Tests</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="AwesomeAssertions" />
|
||||||
|
<PackageReference Include="xunit.v3.mtp-v2" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\FiscalOS.Infra\FiscalOS.Infra.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
+1
-3
@@ -1,6 +1,4 @@
|
|||||||
using FiscalOS.API.Identity;
|
namespace FiscalOS.Infra.Tests.Unit;
|
||||||
|
|
||||||
namespace FiscalOS.API.Tests.Unit;
|
|
||||||
|
|
||||||
public class PasswordHasherTests
|
public class PasswordHasherTests
|
||||||
{
|
{
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
global using FiscalOS.Infra.Identity;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://xunit.net/schema/current/xunit.runner.schema.json"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user