test(acceptance): a zorgprofessional withdraws their own registration (INGETROKKEN) (refs #12)
Owner withdraws → INGETROKKEN + process cancelled; a different bsn is reported not-found. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
22
tests/acceptance/Features/EenRegistratieIntrekken.feature
Normal file
22
tests/acceptance/Features/EenRegistratieIntrekken.feature
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# language: en
|
||||||
|
# Drives S-11 (#12). A zorgprofessional withdraws their own submitted registration ("trek aanvraag
|
||||||
|
# in"): it advances to INGETROKKEN and its running workflow is cancelled (ADR-0014). Only the owner
|
||||||
|
# may withdraw — another bsn is told not-found. Exercised against in-memory stand-ins for the store
|
||||||
|
# and the Workflow Client; the live Flowable message correlation is verified by the domain check.
|
||||||
|
Feature: Een registratie intrekken
|
||||||
|
Als zorgprofessional wil ik mijn ingediende registratie kunnen intrekken
|
||||||
|
zodat een aanvraag die ik niet meer wil niet in behandeling blijft.
|
||||||
|
|
||||||
|
Scenario: De zorgprofessional trekt zijn eigen registratie in
|
||||||
|
Given a submitted registration with a running process
|
||||||
|
When the zorgprofessional withdraws it
|
||||||
|
Then the withdrawal succeeds
|
||||||
|
And the registration has status "INGETROKKEN"
|
||||||
|
And the running process is cancelled
|
||||||
|
|
||||||
|
Scenario: Een andere zorgprofessional kan de registratie niet intrekken
|
||||||
|
Given a submitted registration with a running process
|
||||||
|
When a different zorgprofessional tries to withdraw it
|
||||||
|
Then the withdrawal is reported not found
|
||||||
|
And the registration has status "INGEDIEND"
|
||||||
|
And the running process is not cancelled
|
||||||
59
tests/acceptance/Steps/EenRegistratieIntrekkenSteps.cs
Normal file
59
tests/acceptance/Steps/EenRegistratieIntrekkenSteps.cs
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
using Acceptance.Support;
|
||||||
|
using Big.Application;
|
||||||
|
using Big.Domain;
|
||||||
|
using Reqnroll;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Acceptance.Steps;
|
||||||
|
|
||||||
|
/// <summary>Bindings for <c>EenRegistratieIntrekken.feature</c> (S-11). Submits a registration (which
|
||||||
|
/// records its process) and then applies the WithdrawRegistration use case against in-memory ports;
|
||||||
|
/// one instance per scenario. Scoped to this feature so its "the registration has status" step does
|
||||||
|
/// not clash with the identically phrased steps in the other features.</summary>
|
||||||
|
[Binding]
|
||||||
|
[Scope(Feature = "Een registratie intrekken")]
|
||||||
|
public sealed class EenRegistratieIntrekkenSteps
|
||||||
|
{
|
||||||
|
private const string OwnerBsn = "123456782";
|
||||||
|
|
||||||
|
private readonly InMemoryRegistrationStore _store = new();
|
||||||
|
private readonly InMemoryWorkflowClient _workflow = new();
|
||||||
|
private RegistrationId _id;
|
||||||
|
private WithdrawOutcome _outcome;
|
||||||
|
|
||||||
|
[Given("a submitted registration with a running process")]
|
||||||
|
public async Task GivenASubmittedRegistrationWithARunningProcess()
|
||||||
|
=> _id = await new SubmitRegistration(_store, _workflow).HandleAsync(new SubmitRegistrationCommand(OwnerBsn));
|
||||||
|
|
||||||
|
[When("the zorgprofessional withdraws it")]
|
||||||
|
public async Task WhenTheZorgprofessionalWithdrawsIt()
|
||||||
|
=> _outcome = await new WithdrawRegistration(_store, _workflow).HandleAsync(
|
||||||
|
new WithdrawRegistrationCommand(_id, OwnerBsn));
|
||||||
|
|
||||||
|
[When("a different zorgprofessional tries to withdraw it")]
|
||||||
|
public async Task WhenADifferentZorgprofessionalTriesToWithdrawIt()
|
||||||
|
=> _outcome = await new WithdrawRegistration(_store, _workflow).HandleAsync(
|
||||||
|
new WithdrawRegistrationCommand(_id, "999999990"));
|
||||||
|
|
||||||
|
[Then("the withdrawal succeeds")]
|
||||||
|
public void ThenTheWithdrawalSucceeds() => Assert.Equal(WithdrawOutcome.Withdrawn, _outcome);
|
||||||
|
|
||||||
|
[Then("the withdrawal is reported not found")]
|
||||||
|
public void ThenTheWithdrawalIsReportedNotFound() => Assert.Equal(WithdrawOutcome.NotFound, _outcome);
|
||||||
|
|
||||||
|
[Then("the registration has status \"(.*)\"")]
|
||||||
|
public async Task ThenTheRegistrationHasStatus(string expected)
|
||||||
|
{
|
||||||
|
var registration = await _store.GetAsync(_id);
|
||||||
|
Assert.NotNull(registration);
|
||||||
|
Assert.Equal(expected, registration.Status.ToString().ToUpperInvariant());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Then("the running process is cancelled")]
|
||||||
|
public void ThenTheRunningProcessIsCancelled()
|
||||||
|
=> Assert.Equal(InMemoryWorkflowClient.StartedProcessInstanceId, _workflow.WithdrawnProcessInstanceId);
|
||||||
|
|
||||||
|
[Then("the running process is not cancelled")]
|
||||||
|
public void ThenTheRunningProcessIsNotCancelled()
|
||||||
|
=> Assert.Null(_workflow.WithdrawnProcessInstanceId);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user