Files
register-referentie/services/domain/Big.Tests/OpenZaakWorkerTests.cs
Niek Otten 8d176c2603 test(domain): SubmitRegistration + OpenZaakWorker use cases (refs #6)
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>
2026-06-30 16:59:27 +02:00

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