test(acceptance): beoordeling escalation — both branches (S-14, refs #15)
Gherkin scenarios for the two branches: a beoordeling left unclaimed for 14 days escalates to the teamlead, and one completed before the timer fires does not. Driven through the escalation worker against an in-memory Flowable stand-in. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
44
tests/acceptance/Steps/EenBeoordelingEscalerenSteps.cs
Normal file
44
tests/acceptance/Steps/EenBeoordelingEscalerenSteps.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using Acceptance.Support;
|
||||
using Big.Infrastructure;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Reqnroll;
|
||||
using Xunit;
|
||||
|
||||
namespace Acceptance.Steps;
|
||||
|
||||
/// <summary>Bindings for <c>EenBeoordelingEscaleren.feature</c> (S-14). Drives the escalation worker
|
||||
/// (<see cref="BeoordelingEscalatieProcessor"/>) against an in-memory Flowable stand-in; one instance
|
||||
/// per scenario. Escalation has no domain-aggregate surface — it only reassigns who may claim the
|
||||
/// still-open Beoordelen task — so the scenario asserts on the task's candidate group.</summary>
|
||||
[Binding]
|
||||
[Scope(Feature = "Een beoordeling escaleren")]
|
||||
public sealed class EenBeoordelingEscalerenSteps
|
||||
{
|
||||
private readonly InMemoryEscalatieClient _flowable = new();
|
||||
private string _processInstanceId = "";
|
||||
|
||||
[Given("a registration parked at the Beoordelen task for the behandelaar")]
|
||||
public void GivenARegistrationParkedForTheBehandelaar()
|
||||
=> _processInstanceId = _flowable.ParkBeoordeling();
|
||||
|
||||
[When("the 14-day escalation timer fires")]
|
||||
public void WhenTheEscalationTimerFires()
|
||||
=> _flowable.FireEscalationTimer(_processInstanceId);
|
||||
|
||||
[When("the behandelaar completes the beoordeling before the timer fires")]
|
||||
public void WhenTheBehandelaarCompletesBeforeTheTimer()
|
||||
=> _flowable.CompleteBeoordeling(_processInstanceId);
|
||||
|
||||
[When("the escalation worker runs")]
|
||||
public async Task WhenTheEscalationWorkerRuns()
|
||||
=> await new BeoordelingEscalatieProcessor(
|
||||
_flowable, NullLogger<BeoordelingEscalatieProcessor>.Instance).PumpOnceAsync(5);
|
||||
|
||||
[Then("the beoordeling is reassigned to the teamlead")]
|
||||
public void ThenTheBeoordelingIsReassignedToTheTeamlead()
|
||||
=> Assert.Equal("teamlead", _flowable.CandidateGroupFor(_processInstanceId));
|
||||
|
||||
[Then("the beoordeling stays with the behandelaar")]
|
||||
public void ThenTheBeoordelingStaysWithTheBehandelaar()
|
||||
=> Assert.Equal("behandelaar", _flowable.CandidateGroupFor(_processInstanceId));
|
||||
}
|
||||
Reference in New Issue
Block a user