The wire said Application, the domain said Aanvraag — one aggregate with two names at every hop. Rename the backend DTOs and the /applications route to /aanvragen, regenerate the typed client, and rename the frontend adapter/store to match. Renamed: ApplicationSummaryDto/DetailDto, CreateApplicationRequest, SubmitApplicationRequest/Response → Aanvraag* equivalents; ApplicationsAdapter/Store → AanvragenAdapter/Store; applications.adapter.ts/applications.store.ts → aanvragen.*. Left untouched: the admin Case/Zaak vocabulary (/admin/cases, AdminCasesStore) — a separate read model, not part of this rename; the internal BigRegister.Domain.Applications namespace and the Applications EF table (renaming those needs a new EF migration, out of scope here). Part of the dashboard-readability refactor (see the approved plan). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
75 lines
3.9 KiB
C#
75 lines
3.9 KiB
C#
using System.Net.Http.Headers;
|
|
using System.Net.Http.Json;
|
|
using BigRegister.Api.Contracts;
|
|
using BigRegister.Api.Zgw;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Mvc.Testing;
|
|
|
|
namespace BigRegister.Tests;
|
|
|
|
/// <summary>
|
|
/// WP-54: the one test that proves the BFF actually talks to a REAL OpenZaak — auth accepted,
|
|
/// real response shapes, real pagination/zaaktype→aanvraag-type mapping — rather than the stub
|
|
/// HttpMessageHandler every other Zgw test (<see cref="ZgwZaakMapperTests"/>,
|
|
/// <see cref="OpenZaakZaakSourceTests"/>) uses. Requires the harness in <c>backend/openzaak/</c>
|
|
/// to be up and seeded first (see its README); tagged Category=Integration so it's excluded
|
|
/// from the default `dotnet test` run and from CI (`ci.yml`, `scripts/ci-local.sh` both filter
|
|
/// it out) — nobody without a live OpenZaak should see it fail.
|
|
///
|
|
/// Not an <see cref="IClassFixture{TFixture}"/> off <see cref="TestWebApplicationFactory"/>:
|
|
/// that fixture hardcodes <c>Zgw:Enabled=false</c> (offline default) for every other test class,
|
|
/// so this one builds its own <see cref="WebApplicationFactory{TEntryPoint}"/> layering the
|
|
/// harness's URLs/credentials (matching <c>backend/openzaak/setup_configuration/data.yaml</c>
|
|
/// and <c>bootstrap-catalogus.sh</c>) on top.
|
|
/// </summary>
|
|
[Trait("Category", "Integration")]
|
|
public class OpenZaakIntegrationTests
|
|
{
|
|
private static WebApplicationFactory<Program> Factory(string zaaktypeUrl)
|
|
{
|
|
var dbPath = Path.Combine(Path.GetTempPath(), $"bigregister-oz-integration-{Guid.NewGuid():N}.db");
|
|
return new WebApplicationFactory<Program>().WithWebHostBuilder(builder => builder
|
|
.UseSetting("ConnectionStrings:AppDb", $"Data Source={dbPath}")
|
|
.UseSetting("Zgw:Enabled", "true")
|
|
.UseSetting("Zgw:ZrcBaseUrl", "http://localhost:8000/zaken/api/v1")
|
|
.UseSetting("Zgw:ZtcBaseUrl", "http://localhost:8000/catalogi/api/v1")
|
|
.UseSetting("Zgw:ClientId", "bigregister-test")
|
|
.UseSetting("Zgw:Secret", "bigregister-test-secret")
|
|
.UseSetting("Zgw:UserId", "bigregister-test")
|
|
.UseSetting("Zgw:UserRepresentation", "WP-54 integration test")
|
|
.UseSetting("Zgw:ZaaktypeUrls:herregistratie", zaaktypeUrl));
|
|
}
|
|
|
|
/// <summary>bootstrap-catalogus.sh mints the seeded zaaktype's uuid fresh per harness
|
|
/// instance, so unlike every other setting <c>Factory</c> hardcodes, this one has to be
|
|
/// discovered live — the same real HTTP + JWT this test is meant to exercise, done once up
|
|
/// front to learn the URL <c>Zgw:ZaaktypeUrls</c> needs (see <see cref="OpenZaakZaakSource.AanvraagTypeFor"/>).</summary>
|
|
private static async Task<string> SeededZaaktypeUrlAsync()
|
|
{
|
|
var tokenOptions = new ZgwOptions { ClientId = "bigregister-test", Secret = "bigregister-test-secret" };
|
|
using var client = new HttpClient();
|
|
client.DefaultRequestHeaders.Authorization =
|
|
new AuthenticationHeaderValue("Bearer", new ZgwTokenProvider(tokenOptions).Mint());
|
|
client.DefaultRequestHeaders.Add("Accept-Crs", "EPSG:4326"); // else OpenZaak 412s
|
|
var page = await client.GetFromJsonAsync<ZgwPage<ZgwZaak>>(
|
|
"http://localhost:8000/zaken/api/v1/zaken?identificatie=BIG-2026-000123");
|
|
return Assert.Single(page!.Results).Zaaktype;
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Admin_cases_returns_the_seeded_zaak_mapped_through_real_HTTP_and_JWT()
|
|
{
|
|
using var factory = Factory(await SeededZaaktypeUrlAsync());
|
|
using var client = factory.CreateClient();
|
|
client.DefaultRequestHeaders.Add("X-Role", "admin"); // CasesAdmin gate (cases:manage)
|
|
|
|
var cases = await client.GetFromJsonAsync<List<AanvraagSummaryDto>>("/api/v1/admin/cases");
|
|
|
|
Assert.NotNull(cases);
|
|
// bootstrap-catalogus.sh seeds exactly one zaak, identificatie BIG-2026-000123.
|
|
var seeded = Assert.Single(cases!, c => c.Status.Referentie == "BIG-2026-000123");
|
|
Assert.Equal("herregistratie", seeded.Type);
|
|
Assert.Equal("InBehandeling", seeded.Status.Tag);
|
|
}
|
|
}
|