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>
This commit is contained in:
27
services/domain/Big.Application/OpenZaakWorker.cs
Normal file
27
services/domain/Big.Application/OpenZaakWorker.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Big.Domain;
|
||||
|
||||
namespace Big.Application;
|
||||
|
||||
/// <summary>
|
||||
/// Handles one acquired <c>OpenZaakAanmaken</c> external-worker job (ADR-0009): load the registration
|
||||
/// the job correlates to, open a zaak for it via the ACL (§8.1), attach the zaak to the aggregate, and
|
||||
/// return the zaak URL so the caller can complete the Flowable job. Pure application logic over ports —
|
||||
/// it knows nothing of Flowable; the polling loop that feeds it jobs lives in Infrastructure.
|
||||
/// </summary>
|
||||
public sealed class OpenZaakWorker(IRegistrationStore store, IAclClient acl)
|
||||
{
|
||||
/// <summary>
|
||||
/// Process the job and return the URL of the (existing or newly opened) zaak. Idempotent: if the
|
||||
/// registration already has a zaak — a job redelivered after its completion was lost — it returns
|
||||
/// that zaak without opening a second one (§8.6, at-least-once delivery). An unknown registration
|
||||
/// is an error: it throws, leaving the job un-completed for Flowable to redeliver.
|
||||
/// </summary>
|
||||
public async Task<Uri> HandleAsync(OpenZaakJob job, CancellationToken ct = default)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(job);
|
||||
|
||||
// STUB (red): does not load, call the ACL, or attach.
|
||||
await Task.CompletedTask;
|
||||
return new Uri("about:blank");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user