using Acl.Application; namespace Acl.Tests; public class AclServiceTests { private sealed class FakeGateway : IZaakGateway { public ZaakRequest? Captured; public Uri Result { get; } = new("http://openzaak/zaken/api/v1/zaken/abc"); public Task OpenZaakAsync(ZaakRequest request, CancellationToken ct = default) { Captured = request; return Task.FromResult(Result); } } private sealed class FixedClock(DateOnly today) : IClock { public DateOnly Today { get; } = today; } [Fact] public async Task Opening_a_zaak_default_fills_zgw_fields_and_returns_the_zaak_url() { var gateway = new FakeGateway(); var defaults = new AclDefaults { Bronorganisatie = "517439943", VerantwoordelijkeOrganisatie = "517439943", Vertrouwelijkheidaanduiding = "openbaar", ZaaktypeUrl = new("http://openzaak/catalogi/api/v1/zaaktypen/big"), }; var service = new AclService(gateway, defaults, new FixedClock(new DateOnly(2026, 6, 4))); var url = await service.OpenZaakAsync(new DomainRegistration("123456782")); Assert.Equal(gateway.Result, url); var req = Assert.IsType(gateway.Captured); Assert.Equal("517439943", req.Bronorganisatie); Assert.Equal("517439943", req.VerantwoordelijkeOrganisatie); Assert.Equal("openbaar", req.Vertrouwelijkheidaanduiding); Assert.Equal(defaults.ZaaktypeUrl, req.Zaaktype); Assert.Equal(new DateOnly(2026, 6, 4), req.Startdatum); } [Fact] public async Task Rejects_a_null_registration_without_calling_the_gateway() { var gateway = new FakeGateway(); var defaults = new AclDefaults { Bronorganisatie = "517439943", VerantwoordelijkeOrganisatie = "517439943", Vertrouwelijkheidaanduiding = "openbaar", ZaaktypeUrl = new("http://openzaak/catalogi/api/v1/zaaktypen/big"), }; var service = new AclService(gateway, defaults, new FixedClock(new DateOnly(2026, 6, 4))); await Assert.ThrowsAsync(() => service.OpenZaakAsync(null!)); Assert.Null(gateway.Captured); } }