All checks were successful
## What & why Before this change the self-service confirmation and the openbaar register showed **different** identifiers, so a citizen could not look their registration back up (#78). Now both surface the same **reference**: - **domain → ACL (write):** the domain `registrationId` is set as the zaak's `identificatie` on `POST /zaken`. - **event-subscriber → ACL (read):** the subscriber reads the zaak's `identificatie` back through the ACL (§8.1 — only the ACL talks to ZGW) via a new `POST /zaken/reference`, and stores it on the projection row **and** the `processed_notifications` replay log. - **BFF + openbaar:** the public view exposes `id/status/reference` (never bsn/naam) and searches by id or reference; the register's "Referentie" column shows the reference. Storing the reference in the replay log keeps ADR-0008's **rebuild-is-log-only** invariant intact — `/admin/rebuild` reproduces the reference without re-reading the ACL. Decision recorded in **ADR-0012**. ## Definition of Done - [x] Linked issue: #78 - [x] Tests written first; red → green per layer - [x] Unit + acceptance green (`make unit`): domain 49, acl 27, bff 20, event-subscriber 19, acceptance 7 - [x] Frontend lint + test green (`nx run-many -t lint test`) - [x] Mutation ≥ break(90): acl 100%, event-subscriber 100%, bff 100%, domain 98.41% (pre-existing FlowableWorkflowClient baseline, untouched) - [x] e2e extended: confirmation reference == register reference - [x] openapi.json + api-client regenerated (drift guard green) - [x] ADR-0012 added; demo-script note appended - [x] `Acl__BaseUrl` wired for the subscriber in compose closes #78 Reviewed-on: #79
74 lines
2.6 KiB
C#
74 lines
2.6 KiB
C#
using Big.Application;
|
|
using Big.Domain;
|
|
|
|
namespace Big.Tests;
|
|
|
|
public class OpenZaakWorkerTests
|
|
{
|
|
private static Registration Submitted(string bsn = "123456782")
|
|
{
|
|
var registration = Registration.Submit(bsn);
|
|
registration.RecordProcessStarted("proc-1");
|
|
return registration;
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Handling_a_job_opens_a_zaak_via_the_acl_and_attaches_it()
|
|
{
|
|
var registration = Submitted();
|
|
var store = new FakeRegistrationStore();
|
|
store.Seed(registration);
|
|
var acl = new FakeAclClient();
|
|
var worker = new OpenZaakWorker(store, acl);
|
|
|
|
var zaakUrl = await worker.HandleAsync(new OpenZaakJob("job-1", registration.Id));
|
|
|
|
Assert.Equal(FakeAclClient.DefaultZaakUrl, zaakUrl);
|
|
Assert.Equal("123456782", acl.OpenedForBsn);
|
|
// The registration's own id is handed to the ACL as the zaak reference (identificatie),
|
|
// so the openbaar register can show the reference the zorgprofessional received (#78).
|
|
Assert.Equal(registration.Id.ToString(), acl.OpenedWithReference);
|
|
var saved = await store.GetAsync(registration.Id);
|
|
Assert.Equal(FakeAclClient.DefaultZaakUrl, saved!.ZaakUrl);
|
|
Assert.Equal(1, store.SaveCount);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Handling_a_null_job_is_rejected()
|
|
{
|
|
var worker = new OpenZaakWorker(new FakeRegistrationStore(), new FakeAclClient());
|
|
|
|
await Assert.ThrowsAsync<ArgumentNullException>(() => worker.HandleAsync(null!));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Handling_a_job_for_an_unknown_registration_throws_and_opens_no_zaak()
|
|
{
|
|
var store = new FakeRegistrationStore();
|
|
var acl = new FakeAclClient();
|
|
var worker = new OpenZaakWorker(store, acl);
|
|
|
|
var job = new OpenZaakJob("job-1", RegistrationId.New());
|
|
var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => worker.HandleAsync(job));
|
|
Assert.Contains(job.RegistrationId.ToString(), ex.Message);
|
|
Assert.Equal(0, acl.CallCount);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Handling_a_redelivered_job_is_idempotent_and_does_not_open_a_second_zaak()
|
|
{
|
|
var registration = Submitted();
|
|
var store = new FakeRegistrationStore();
|
|
store.Seed(registration);
|
|
var acl = new FakeAclClient();
|
|
var worker = new OpenZaakWorker(store, acl);
|
|
var job = new OpenZaakJob("job-1", registration.Id);
|
|
|
|
var first = await worker.HandleAsync(job);
|
|
var second = await worker.HandleAsync(job);
|
|
|
|
Assert.Equal(first, second);
|
|
Assert.Equal(1, acl.CallCount);
|
|
}
|
|
}
|