using Acceptance.Support; using Big.Infrastructure; using Microsoft.Extensions.Logging.Abstractions; using Reqnroll; using Xunit; namespace Acceptance.Steps; /// Bindings for EenBeoordelingEscaleren.feature (S-14). Drives the escalation worker /// () 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. [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.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)); }