feat(#13): S-12c-2 — behandel decide → domain + complete workflow task #86
@@ -15,6 +15,7 @@ Feature: Een registratie beoordelen
|
|||||||
When the behandelaar decides "goedkeuren"
|
When the behandelaar decides "goedkeuren"
|
||||||
Then the registration has status "INGESCHREVEN"
|
Then the registration has status "INGESCHREVEN"
|
||||||
And the zaak's final status is set via the ACL
|
And the zaak's final status is set via the ACL
|
||||||
|
And the beoordeling task is completed with "goedkeuren"
|
||||||
|
|
||||||
Scenario: Afwijzen wijst de registratie af zonder de ACL
|
Scenario: Afwijzen wijst de registratie af zonder de ACL
|
||||||
Given a submitted registration with an opened zaak
|
Given a submitted registration with an opened zaak
|
||||||
@@ -22,3 +23,4 @@ Feature: Een registratie beoordelen
|
|||||||
And the behandelaar decides "afwijzen"
|
And the behandelaar decides "afwijzen"
|
||||||
Then the registration has status "AFGEWEZEN"
|
Then the registration has status "AFGEWEZEN"
|
||||||
And the ACL is not asked to set the zaak status
|
And the ACL is not asked to set the zaak status
|
||||||
|
And the beoordeling task is completed with "afwijzen"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public sealed class EenRegistratieBeoordelenSteps
|
|||||||
{
|
{
|
||||||
private readonly InMemoryAclClient _acl = new();
|
private readonly InMemoryAclClient _acl = new();
|
||||||
private readonly InMemoryRegistrationStore _store = new();
|
private readonly InMemoryRegistrationStore _store = new();
|
||||||
|
private readonly InMemoryUserTaskClient _tasks = new();
|
||||||
private RegistrationId _id;
|
private RegistrationId _id;
|
||||||
|
|
||||||
[Given("a submitted registration with an opened zaak")]
|
[Given("a submitted registration with an opened zaak")]
|
||||||
@@ -25,6 +26,8 @@ public sealed class EenRegistratieBeoordelenSteps
|
|||||||
registration.AttachZaak(InMemoryAclClient.OpenedZaakUrl);
|
registration.AttachZaak(InMemoryAclClient.OpenedZaakUrl);
|
||||||
await _store.SaveAsync(registration);
|
await _store.SaveAsync(registration);
|
||||||
_id = registration.Id;
|
_id = registration.Id;
|
||||||
|
// The process has parked at the Beoordelen user task awaiting the behandelaar.
|
||||||
|
_tasks.Open(_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
[When("the behandelaar takes it into behandeling")]
|
[When("the behandelaar takes it into behandeling")]
|
||||||
@@ -37,7 +40,7 @@ public sealed class EenRegistratieBeoordelenSteps
|
|||||||
|
|
||||||
[When("the behandelaar decides \"(.*)\"")]
|
[When("the behandelaar decides \"(.*)\"")]
|
||||||
public async Task WhenTheBehandelaarDecides(string besluit)
|
public async Task WhenTheBehandelaarDecides(string besluit)
|
||||||
=> await new BeoordeelRegistratie(_store, _acl).HandleAsync(
|
=> await new BeoordeelRegistratie(_store, _acl, _tasks).HandleAsync(
|
||||||
new BeoordeelRegistratieCommand(_id, Enum.Parse<BeoordelingsBesluit>(besluit, ignoreCase: true)));
|
new BeoordeelRegistratieCommand(_id, Enum.Parse<BeoordelingsBesluit>(besluit, ignoreCase: true)));
|
||||||
|
|
||||||
[Then("the registration has status \"(.*)\"")]
|
[Then("the registration has status \"(.*)\"")]
|
||||||
@@ -55,4 +58,8 @@ public sealed class EenRegistratieBeoordelenSteps
|
|||||||
[Then("the ACL is not asked to set the zaak status")]
|
[Then("the ACL is not asked to set the zaak status")]
|
||||||
public void ThenTheAclIsNotAskedToSetTheZaakStatus()
|
public void ThenTheAclIsNotAskedToSetTheZaakStatus()
|
||||||
=> Assert.Null(_acl.ApprovedZaakUrl);
|
=> Assert.Null(_acl.ApprovedZaakUrl);
|
||||||
|
|
||||||
|
[Then("the beoordeling task is completed with \"(.*)\"")]
|
||||||
|
public void ThenTheBeoordelingTaskIsCompletedWith(string besluit)
|
||||||
|
=> Assert.Equal(Enum.Parse<BeoordelingsBesluit>(besluit, ignoreCase: true), _tasks.Completed?.Besluit);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,9 @@ public sealed class CapturingDomainClient : IDomainClient
|
|||||||
|
|
||||||
public Task<IReadOnlyList<WerkbakItem>> GetWerkbakAsync(CancellationToken ct = default)
|
public Task<IReadOnlyList<WerkbakItem>> GetWerkbakAsync(CancellationToken ct = default)
|
||||||
=> Task.FromResult<IReadOnlyList<WerkbakItem>>([]);
|
=> Task.FromResult<IReadOnlyList<WerkbakItem>>([]);
|
||||||
|
|
||||||
|
public Task DecideAsync(string registrationId, string besluit, CancellationToken ct = default)
|
||||||
|
=> Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Serves configurable projection rows.</summary>
|
/// <summary>Serves configurable projection rows.</summary>
|
||||||
|
|||||||
@@ -43,6 +43,29 @@ public sealed class InMemoryAclClient : IAclClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>An in-memory user-task client for the beoordeling acceptance scenario: it holds one open
|
||||||
|
/// Beoordelen task per registration and records the besluit each is completed with.</summary>
|
||||||
|
public sealed class InMemoryUserTaskClient : IUserTaskClient
|
||||||
|
{
|
||||||
|
private readonly List<BeoordelingTask> _open = [];
|
||||||
|
|
||||||
|
public (string TaskId, BeoordelingsBesluit Besluit)? Completed { get; private set; }
|
||||||
|
|
||||||
|
public void Open(RegistrationId registrationId) => _open.Add(new BeoordelingTask($"task-{registrationId}", registrationId));
|
||||||
|
|
||||||
|
public Task<IReadOnlyList<BeoordelingTask>> GetOpenBeoordelingenAsync(CancellationToken ct = default)
|
||||||
|
=> Task.FromResult<IReadOnlyList<BeoordelingTask>>(_open);
|
||||||
|
|
||||||
|
public Task ClaimAsync(string taskId, string behandelaar, CancellationToken ct = default) => Task.CompletedTask;
|
||||||
|
|
||||||
|
public Task CompleteBeoordelingAsync(string taskId, BeoordelingsBesluit besluit, CancellationToken ct = default)
|
||||||
|
{
|
||||||
|
Completed = (taskId, besluit);
|
||||||
|
_open.RemoveAll(t => t.TaskId == taskId);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>An in-memory registration store for the domain acceptance scenario.</summary>
|
/// <summary>An in-memory registration store for the domain acceptance scenario.</summary>
|
||||||
public sealed class InMemoryRegistrationStore : IRegistrationStore
|
public sealed class InMemoryRegistrationStore : IRegistrationStore
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user