Files
register-referentie/tests/acceptance/Steps/EenZaakOpenenSteps.cs
Edwin van den Houdt 389d35fd39 feat(acl): wire BDD step bindings to AclService (refs #5)
Implement the step definitions for EenZaakOpenen.feature against the
existing AclService, with an in-memory gateway standing in for the OpenZaak
Zaken API. The scenario now passes: a domain registration is default-filled
into a ZaakRequest (ADR-0003) and the created zaak URL is returned.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 11:16:38 +02:00

66 lines
2.6 KiB
C#

using Acceptance.Support;
using Acl.Application;
using Reqnroll;
using Xunit;
namespace Acceptance.Steps;
/// <summary>Bindings for <c>EenZaakOpenen.feature</c>. Reqnroll creates one
/// instance per scenario, so instance fields hold scenario-scoped state.</summary>
[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<ZaakRequest>(_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<string, string> ToFieldMap(DataTable table)
=> table.Rows.ToDictionary(r => r["field"], r => r["value"]);
}