using System.Net; using System.Net.Http.Json; using Acl.Application; using Acl.Infrastructure; namespace Acl.Tests; public class OpenZaakGatewayTests { private sealed class StubHandler(Func> onSend) : HttpMessageHandler { protected override Task SendAsync(HttpRequestMessage request, CancellationToken ct) => onSend(request); } [Fact] public async Task Posts_zaak_to_openzaak_with_bearer_and_default_fields_and_returns_url() { HttpRequestMessage? seen = null; string? body = null; var handler = new StubHandler(async req => { seen = req; body = await req.Content!.ReadAsStringAsync(); return new HttpResponseMessage(HttpStatusCode.Created) { Content = JsonContent.Create(new { url = "http://openzaak/zaken/api/v1/zaken/xyz" }), }; }); var gateway = new OpenZaakGateway( new HttpClient(handler), new OpenZaakOptions { BaseUrl = new("http://openzaak"), ClientId = "cid", Secret = "sec" }); var request = new ZaakRequest( "517439943", "517439943", "openbaar", new("http://openzaak/catalogi/api/v1/zaaktypen/big"), new DateOnly(2026, 6, 4)); var url = await gateway.OpenZaakAsync(request); Assert.Equal("http://openzaak/zaken/api/v1/zaken/xyz", url.ToString()); Assert.Equal(HttpMethod.Post, seen!.Method); Assert.Equal("http://openzaak/zaken/api/v1/zaken", seen.RequestUri!.ToString()); Assert.Equal("Bearer", seen.Headers.Authorization!.Scheme); Assert.False(string.IsNullOrWhiteSpace(seen.Headers.Authorization.Parameter)); Assert.Contains("\"bronorganisatie\":\"517439943\"", body); Assert.Contains("\"verantwoordelijkeOrganisatie\":\"517439943\"", body); Assert.Contains("\"vertrouwelijkheidaanduiding\":\"openbaar\"", body); Assert.Contains("\"startdatum\":\"2026-06-04\"", body); Assert.Contains("\"zaaktype\":\"http://openzaak/catalogi/api/v1/zaaktypen/big\"", body); } }