Ejemplo n.º 1
0
        public void AddTriggerActionWRequest_throws_InvalidOperationException_if_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.AddTriggerAction <string>(SaleEvent.Pay, (sale, stringParam) => Task.Delay(1));

            Assert.Throws <InvalidOperationException>(() => sut.AddTriggerAction <string>(SaleEvent.Pay, (sale, stringParam) => Task.Delay(1)));
        }
        public void AddTriggerAction_throws_InvalidOperationException_if_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.AddTriggerAction(SaleEvent.Pay, (sale, _) => Task.CompletedTask);

            Assert.Throws <InvalidOperationException>(() => sut.AddTriggerAction(SaleEvent.Pay, (sale, _) => Task.CompletedTask));
        }
Ejemplo n.º 3
0
        public void FireTrigger_executes_superState_if_currentState_not_successful()
        {
            var sale = new Sale(saleID: 96)
            {
                State = SaleState.ChangeDue
            };
            var stateMachine             = new StateMachine <Sale, SaleState, SaleEvent>(sale1 => sale1.State, (sale1, newState) => sale1.State = newState);
            var openState                = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.Open, stateMachine);
            var openStatePayTriggerFired = false;

            openState
            .AddTriggerAction(SaleEvent.Pay, sale1 => { openStatePayTriggerFired = true; })
            .AddTransition(SaleEvent.Pay, SaleState.Complete, name: "openStatePay");
            var changeDueState = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine);

            changeDueState.AddSuperstate(openState);
            var parameters = new ExecutionParameters <Sale, SaleEvent>(SaleEvent.Pay, sale);

            var result = changeDueState.FireTrigger(parameters);

            Assert.True(openStatePayTriggerFired);
            Assert.True(result.WasTransitioned);
            Assert.Equal(SaleState.Complete, sale.State);
            Assert.Equal(SaleState.Complete, result.CurrentState);
            Assert.Equal(SaleState.ChangeDue, result.PreviousState);
            Assert.Equal(SaleState.ChangeDue, result.StartingState);
            Assert.Equal("openStatePay", result.LastTransitionName);
        }
Ejemplo n.º 4
0
        public void AddTriggerActionWRequest_throws_ArgumentNullException_if_Action_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.AddTriggerAction <string>(SaleEvent.AddItem, action: null));
        }