public void Execute_doesnt_change_state_if_condition_not_met() { const SaleState startState = SaleState.Open; const SaleState endState = SaleState.Complete; var sale = new Sale(saleID: 66) { State = startState }; var sut = new StateTransitionAutoForwardParameterized <Sale, SaleState, SaleEvent, string>( GetStateMachine() , endState , startState , condition: (_, stringParam) => false , name: "test" , priority: 1); var result = sut.Execute(new ExecutionParameters <Sale, SaleEvent>(SaleEvent.Pay, sale, request: "notUsed"), new StateTransitionResult <SaleState, SaleEvent>(SaleEvent.Pay , startState , startState , startState , "transactionName")); Assert.Equal(startState, sale.State); Assert.False(result.ConditionMet); Assert.False(result.WasTransitioned); Assert.True(result.TransitionDefined); }
public void Execute_throws_ArgumentException_if_Request_is_wrong_type() { const SaleState startState = SaleState.Open; var sale = new Sale(saleID: 66) { State = startState }; var sut = new StateTransitionAutoForwardParameterized <Sale, SaleState, SaleEvent, string>( GetStateMachine() , SaleState.Complete , SaleState.Open , condition: (_, stringParam) => true , name: "test" , priority: 1); var executionParams = new ExecutionParameters <Sale, SaleEvent>(SaleEvent.Pay, sale, request: 1); Assert.Throws <ArgumentException>(() => sut.Execute(executionParams, GetDummyResult())); }
public void Execute_changes_state_if_condition_met() { const SaleState startState = SaleState.Open; const SaleState endState = SaleState.Complete; var sale = new Sale(saleID: 66) { State = startState }; var sut = new StateTransitionAutoForwardParameterized <Sale, SaleState, SaleEvent, string>( GetStateMachine() , toState: endState , triggerState: startState , condition: (_, stringParam) => true , name: "test" , priority: 1); var result = sut.Execute(new ExecutionParameters <Sale, SaleEvent>(SaleEvent.Pay, sale, request: "notUsed"), GetDummyResult()); Assert.True(result.WasTransitioned); Assert.Equal(endState, sale.State); }