Esempio n. 1
0
        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)));
        }
Esempio n. 3
0
        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>)));
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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);
        }