コード例 #1
0
        public async Task ShouldTransitionIntoMultipleStates()
        {
            // Arrange
            var context = new TesTSubject();
            var reducer = this.provider.GetRequiredService <IStateReducer <TesTSubject> >();

            reducer.SetState(TestStateId.New, context);

            // Act & Assert
            var result1 = await context.Apply(new Test1Action());

            Assert.Equal(TestStateId.Processing.Name, context.State.StateId.Name);

            var result2 = await context.Apply(new Test3Action());

            Assert.Equal(TestStateId.Complete.Name, context.State.StateId.Name);

            var result3 = await context.Apply(new Test2Action());

            Assert.Equal(TestStateId.Fault.Name, context.State.StateId.Name);

            Assert.Equal(StateResponse.Success.Id, result1.Id);
            Assert.Equal(StateResponse.Success.Name, result1.Name);

            Assert.Equal(StateResponse.Success.Id, result2.Id);
            Assert.Equal(StateResponse.Success.Name, result2.Name);

            Assert.Equal(StateResponse.Success.Id, result3.Id);
            Assert.Equal(StateResponse.Success.Name, result3.Name);
        }
コード例 #2
0
        public async Task ShouldVerifyStateReducer2FromFactory()
        {
            // Arrange
            var reducer = this.provider
                          .GetRequiredService <IStateReducerFactory <string, TesTSubject> >()
                          .Create("TEST2");

            var context = new TesTSubject();

            reducer.SetState(TestStateId.New, context);

            // Act & Assert
            await context.Apply(new Test1Action());

            var result1 = await context.Apply(new Test2Action());

            Assert.Equal(TestStateId.Fault.Name, context.State.StateId.Name);
            Assert.Equal(StateResponse.Success.Id, result1.Id);

            reducer.SetState(TestStateId.New, context);

            await context.Apply(new Test1Action());

            var result2 = await context.Apply(new Test3Action());

            Assert.Equal(TestStateId.Processing.Name, context.State.StateId.Name);
            Assert.Equal(StateResponse.NoMatchingAction.Id, result2.Id);
        }
コード例 #3
0
        public async Task ShouldApplyTest1ActionAndResultInStateProcessing()
        {
            // Arrange
            var context = new TesTSubject();
            var reducer = this.provider.GetRequiredService <IStateReducer <TesTSubject> >();

            reducer.SetState(TestStateId.New, context);

            // Act
            var result = await context.Apply(new Test1Action());

            // Assert
            Assert.Equal(StateResponse.Success.Id, result.Id);
            Assert.Equal(StateResponse.Success.Name, result.Name);
            Assert.Equal(TestStateId.Processing.Name, context.State.StateId.Name);
        }
コード例 #4
0
        public async Task ShouldReturnNoMatchingActionResultWhenActionIsNotAvailableForState()
        {
            // Arrange
            var context = new TesTSubject();
            var reducer = this.provider.GetRequiredService <IStateReducer <TesTSubject> >();

            reducer.SetState(TestStateId.New, context);

            // Act
            var result1 = await context.Apply(new Test1Action());

            var result2 = await context.Apply(new Test1Action());

            // Assert
            Assert.Equal(StateResponse.Success.Id, result1.Id);
            Assert.Equal(StateResponse.Success.Name, result1.Name);

            Assert.Equal(StateResponse.NoMatchingAction.Id, result2.Id);
            Assert.Equal(StateResponse.NoMatchingAction.Name, result2.Name);

            Assert.Equal(TestStateId.Processing.Name, context.State.StateId.Name);
        }