Failing application-layer tests over fake ports (IWorkflowClient, IAclClient, IRegistrationStore): - Submit persists an INGEDIEND registration and starts the registratie process, recording the instance id — and persists *before* starting, so the worker can correlate the OpenZaakAanmaken job back to its aggregate (ADR-0009). - The worker opens a zaak via the ACL and attaches it; an unknown registration throws (job left for redelivery); a redelivered job is idempotent and opens no second zaak (§8.6). Handlers are stubs (no persistence / no ACL call) so the tests compile and fail on their assertions; the green commit implements them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
61 lines
2.0 KiB
C#
61 lines
2.0 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 InMemoryRegistrationStore();
|
|
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);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Handling_a_job_for_an_unknown_registration_throws_and_opens_no_zaak()
|
|
{
|
|
var store = new InMemoryRegistrationStore();
|
|
var acl = new FakeAclClient();
|
|
var worker = new OpenZaakWorker(store, acl);
|
|
|
|
await Assert.ThrowsAsync<InvalidOperationException>(
|
|
() => worker.HandleAsync(new OpenZaakJob("job-1", RegistrationId.New())));
|
|
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 InMemoryRegistrationStore();
|
|
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);
|
|
}
|
|
}
|