OpenZaakWorker forwards registration.Id to IAclClient.OpenZaakAsync so the zaak's identificatie equals the reference the citizen sees on the submit confirmation. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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);
|
|
}
|
|
}
|