public ISpecComponentBuilder <TInput> WithGuard(Func <IServiceProvider, ISpec <TInput> > guardFactory) { var component = new SpecComponent(() => guardFactory.Invoke(this.provider)); this.parent.Add(component); return(new SpecComponentBuilder <TInput>(this.builder, component, this.provider)); }
public async Task ShouldReturnUnspecifiedResponseWhenBothSpecAndNextComponentAreNull() { // Arrange var input = new TestAction("TEST"); var state = TestStateId.New; var component = new SpecComponent(() => null); // Act var result = await component.Apply(input, state); // Assert Assert.Equal(StateMachineResponse.Unspecified.Id, result.Response.Id); }
public async Task ShouldReturnUnspecifiedResponseWhenNextComponentIdNullAndSpecIsOfWrongType() { // Arrange var input = new TestAction("TEST"); var state = TestStateId.New; var component = new SpecComponent(() => Mock.Of <ISpec <string> >(MockBehavior.Strict)); // Act var result = await component.Apply(input, state); // Assert Assert.Equal(StateMachineResponse.Unspecified.Id, result.Response.Id); }
public async Task ShouldReturnUnsatisfiedResponseWhenSpecIsNotSatisfied() { // Arrange var input = new TestAction("TEST"); var state = TestStateId.New; var component = new SpecComponent(() => this.spec); Mock.Get(this.spec) .Setup(s => s.IsSatisfiedBy(input)) .Returns(false); // Act var result = await component.Apply(input, state); // Assert Assert.Equal(StateMachineResponse.Unsatisfied.Id, result.Response.Id); }
public async Task ShouldReturnSuccess() { // Arrange var input = new TestAction("TEST"); var state = TestStateId.New; var component = new SpecComponent(() => this.spec); component.Add(this.next); Mock.Get(this.spec) .Setup(s => s.IsSatisfiedBy(input)) .Returns(true); Mock.Get(this.next) .Setup(n => n.Apply(input, state)) .ReturnsAsync(new StateTransitionResponse(StateMachineResponse.Success, state)); // Act var result = await component.Apply(input, state); // Assert Assert.Equal(StateMachineResponse.Success.Id, result.Response.Id); }