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));
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }