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); }
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); }
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); }
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); }