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); 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(() => 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(() => 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); } }