using Acceptance.Support; using Acl.Application; using Reqnroll; using Xunit; namespace Acceptance.Steps; /// Bindings for EenZaakOpenen.feature. Reqnroll creates one /// instance per scenario, so instance fields hold scenario-scoped state. [Binding] public sealed class EenZaakOpenenSteps { private readonly InMemoryZaakGateway _gateway = new(); private DomainRegistration? _registration; private AclDefaults? _defaults; private DateOnly _today; private Uri? _returnedUrl; [Given("a domain registration for BSN \"(.*)\"")] public void GivenADomainRegistrationForBsn(string bsn) => _registration = new DomainRegistration(bsn); [Given("the ACL is configured with these defaults:")] public void GivenTheAclIsConfiguredWithTheseDefaults(DataTable defaults) { var values = ToFieldMap(defaults); _defaults = new AclDefaults { Bronorganisatie = values["bronorganisatie"], VerantwoordelijkeOrganisatie = values["verantwoordelijkeOrganisatie"], Vertrouwelijkheidaanduiding = values["vertrouwelijkheidaanduiding"], ZaaktypeUrl = new Uri(values["zaaktype"]), }; } [Given("today is \"(.*)\"")] public void GivenTodayIs(string date) => _today = DateOnly.Parse(date); [When("the domain asks the ACL to open a zaak")] public async Task WhenTheDomainAsksTheAclToOpenAZaak() { var service = new AclService(_gateway, _defaults!, new FixedClock(_today)); _returnedUrl = await service.OpenZaakAsync(_registration!); } [Then("a zaak is created with these default-filled fields")] public void ThenAZaakIsCreatedWithTheseDefaultFilledFields(DataTable expected) { var request = Assert.IsType(_gateway.Captured); var fields = ToFieldMap(expected); Assert.Equal(fields["bronorganisatie"], request.Bronorganisatie); Assert.Equal(fields["verantwoordelijkeOrganisatie"], request.VerantwoordelijkeOrganisatie); Assert.Equal(fields["vertrouwelijkheidaanduiding"], request.Vertrouwelijkheidaanduiding); Assert.Equal(fields["zaaktype"], request.Zaaktype.ToString()); Assert.Equal(fields["startdatum"], request.Startdatum.ToString("yyyy-MM-dd")); } [Then("the ACL returns the URL of the created zaak")] public void ThenTheAclReturnsTheUrlOfTheCreatedZaak() => Assert.Equal(InMemoryZaakGateway.CreatedZaakUrl, _returnedUrl); private static Dictionary ToFieldMap(DataTable table) => table.Rows.ToDictionary(r => r["field"], r => r["value"]); }