public void AddAutoFallbackTransitionWPreviousState_throws_InvalidOperationException_if_AutoTransition_already_set() { var stateMachine = new StateMachine <Sale, SaleState, SaleEvent>(sale => sale.State, (sale, newState) => sale.State = newState); var sut = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine); sut.AddAutoFallbackTransition(SaleEvent.Pay, SaleState.Open, _ => true); Assert.Throws <InvalidOperationException>(() => sut.AddAutoFallbackTransition(SaleEvent.Pay, SaleState.Open, _ => true)); }
public void AddAutoFallbackTransitionWRequest_throws_InvalidOperationException_if_AutoTransition_already_set() { var stateMachine = new StateMachine <Sale, SaleState, SaleEvent>(sale => sale.State, (sale, newState) => sale.State = newState); var sut = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine); sut.AddAutoFallbackTransition <string>(SaleEvent.Pay, SaleState.ChangeDue, (sale, stringParam, _) => Task.FromResult(result: true)); Assert.Throws <InvalidOperationException>(() => sut.AddAutoFallbackTransition <string>(SaleEvent.Pay, SaleState.ChangeDue, (sale, stringParam, _) => Task.FromResult(result: true))); }
public void AddAutoFallbackTransitionWRequestPreviousState_throws_ArgumentNullException_if_Condition_null() { var stateMachine = new StateMachine <Sale, SaleState, SaleEvent>(sale => sale.State, (sale, newState) => sale.State = newState); var sut = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine); Assert.Throws <ArgumentNullException>(() => sut.AddAutoFallbackTransition(SaleEvent.Pay, SaleState.Open, condition: (null as Func <Sale, string, bool>))); }
public void AddAutoFallbackTransitionWPreviousState_throws_ArgumentNullException_if_Condition_null() { var stateMachine = new StateMachine <Sale, SaleState, SaleEvent>(sale => sale.State, (sale, newState) => sale.State = newState); var sut = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine); Assert.Throws <ArgumentNullException>(() => sut.AddAutoFallbackTransition(SaleEvent.Pay, SaleState.Complete, condition: null, previousState: SaleState.Open)); }
public void AddAutoFallbackTransitionWRequest_adds_transition() { var stateMachine = new StateMachine <Sale, SaleState, SaleEvent>(sale => sale.State, (sale, newState) => sale.State = newState); var sut = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine); sut.AddAutoFallbackTransition <string>(SaleEvent.Pay, SaleState.ChangeDue, (sale, s, _) => Task.FromResult(result: true)); Assert.Single(((StateConfiguration <Sale, SaleState, SaleEvent>)stateMachine.ConfigureState(SaleState.ChangeDue)).AutoTransitions); }
public void AddAutoFallbackTransition_with_previousState_adds_transition_to_both_states() { var stateMachine = new StateMachine <Sale, SaleState, SaleEvent>(sale => sale.State, (sale, newState) => sale.State = newState); var sut = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine); sut.AddAutoFallbackTransition(SaleEvent.Pay, SaleState.Complete, SaleState.ChangeDue, condition: sale => true); Assert.Single(sut.Transitions); StateConfiguration <Sale, SaleState, SaleEvent> tempStateConfig = stateMachine.ConfigureState(SaleState.Complete) as StateConfiguration <Sale, SaleState, SaleEvent>; Assert.Single(tempStateConfig.AutoTransitions); }