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>
45 lines
2.0 KiB
C#
45 lines
2.0 KiB
C#
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));
|
|
}
|