Added tests, need to go through them manually to check if they make sense and are correct later

This commit is contained in:
moarten
2026-04-19 20:55:26 +02:00
parent 11bff0de63
commit 3a1071dadc
10 changed files with 862 additions and 3 deletions

View File

@@ -0,0 +1,157 @@
using System.Net;
using System.Net.Http.Json;
using FluentAssertions;
using Lutra.API.IntegrationTests.Infrastructure;
using Lutra.Application.Supermarkten;
using Lutra.Domain.Entities;
namespace Lutra.API.IntegrationTests.Controllers;
public class SupermarktenControllerTests(LutraApiFactory factory)
: IntegrationTestBase(factory)
{
// ── GET /api/supermarkten ─────────────────────────────────────────────────
[Fact]
public async Task Get_ReturnsOk_WithEmptyList_WhenNoDataExists()
{
var response = await Client.GetAsync("/api/supermarkten");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var body = await response.Content.ReadFromJsonAsync<GetSupermarkten.Response>();
body.Should().NotBeNull();
body!.Supermarkten.Should().BeEmpty();
}
[Fact]
public async Task Get_ReturnsSeededSupermarkt()
{
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Albert Heijn",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
var response = await Client.GetAsync("/api/supermarkten");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var body = await response.Content.ReadFromJsonAsync<GetSupermarkten.Response>();
body!.Supermarkten.Should().HaveCount(1);
body.Supermarkten.First().Naam.Should().Be("Albert Heijn");
}
[Fact]
public async Task Get_ReturnsAllSeededSupermarkten()
{
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Albert Heijn",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Jumbo",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Picnic",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
var response = await Client.GetAsync("/api/supermarkten");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var body = await response.Content.ReadFromJsonAsync<GetSupermarkten.Response>();
body!.Supermarkten.Should().HaveCount(3);
}
// ── GET /api/supermarkten — pagination ────────────────────────────────────
[Fact]
public async Task Get_Pagination_ReturnsCorrectPage()
{
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Albert Heijn",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Jumbo",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Picnic",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
var response = await Client.GetAsync("/api/supermarkten?skip=1&take=1");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var body = await response.Content.ReadFromJsonAsync<GetSupermarkten.Response>();
body!.Supermarkten.Should().HaveCount(1);
// Handler orders by Naam ascending, so skip=1 skips "Albert Heijn" and returns "Jumbo".
body.Supermarkten.First().Naam.Should().Be("Jumbo");
}
[Fact]
public async Task Get_Pagination_ReturnsEmptyList_WhenSkipExceedsTotalCount()
{
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Albert Heijn",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
var response = await Client.GetAsync("/api/supermarkten?skip=10&take=50");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var body = await response.Content.ReadFromJsonAsync<GetSupermarkten.Response>();
body!.Supermarkten.Should().BeEmpty();
}
// ── GET /api/supermarkten — sorting ───────────────────────────────────────
[Fact]
public async Task Get_ReturnsSupermarkten_OrderedByNaamAscending()
{
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Picnic",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Albert Heijn",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow
});
var response = await Client.GetAsync("/api/supermarkten");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var body = await response.Content.ReadFromJsonAsync<GetSupermarkten.Response>();
var namen = body!.Supermarkten.Select(s => s.Naam).ToList();
namen.Should().BeInAscendingOrder();
}
// ── Soft-delete behaviour ─────────────────────────────────────────────────
[Fact]
public async Task Get_DoesNotReturn_SoftDeletedSupermarkt()
{
await SeedAsync(new Supermarkt
{
Id = Guid.NewGuid(), Naam = "Verwijderd",
CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow,
DeletedAt = DateTime.UtcNow
});
var response = await Client.GetAsync("/api/supermarkten");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var body = await response.Content.ReadFromJsonAsync<GetSupermarkten.Response>();
body!.Supermarkten.Should().BeEmpty();
}
}