示例#1
0
            public void Should_Build_RuleCommandScope_When_RuleTemplate_WithArgs_AndCustomError(string testId, Func <dynamic, ISpecificationOut <TestClass> > appendContentCommands, ErrorContentApiHelper.ExpectedErrorContent expectedErrorContent, Func <dynamic, ISpecificationOut <TestClass> > appendSetupCommands, ErrorSetupApiHelper.ExpectedErrorSetup <TestClass> expectedErrorSetup)
            {
                testId.Should().NotBeNull();

                var context = new ScopeBuilderContext();

                var builder = new ScopeBuilder();

                Predicate <TestClass> predicate = x => true;

                var args = new IArg[]
                {
                    Arg.Text("argName1", "argValue"),
                    Arg.Number("argName2", 2),
                };

                Specification <TestClass> specification = m => appendSetupCommands(appendContentCommands(m.RuleTemplate(predicate, "ruleKey", args)));

                var scope = builder.Build(specification, context);

                scope.CommandScopes.Should().NotBeEmpty();
                scope.CommandScopes.Count.Should().Be(1);
                scope.CommandScopes[0].Should().BeOfType <RuleCommandScope <TestClass> >();

                var ruleCommandScope = (RuleCommandScope <TestClass>)scope.CommandScopes[0];

                ruleCommandScope.Path.Should().Be(expectedErrorSetup.Path);
                ruleCommandScope.ExecutionCondition.Should().Be(expectedErrorSetup.ShouldExecute);
                ruleCommandScope.ErrorMode.Should().Be(expectedErrorContent.Mode);
                ruleCommandScope.IsValid.Should().BeSameAs(predicate);

                ruleCommandScope.ErrorId.Should().BeGreaterOrEqualTo(0);

                if (expectedErrorContent.ShouldBeEmpty())
                {
                    ruleCommandScope.ErrorId.Should().Be(context.DefaultErrorId);
                }
                else
                {
                    ruleCommandScope.ErrorId.Should().NotBe(context.DefaultErrorId);

                    context.Errors.Keys.Should().Contain(ruleCommandScope.ErrorId);
                    var error = context.Errors[ruleCommandScope.ErrorId];

                    expectedErrorContent.Match(error);

                    error.Args.Should().BeSameAs(args);
                }
            }
示例#2
0
        public void Should_CreateModelScheme_With_Errors()
        {
            Specification <TestClass> classSpecification = c => c
                                                           .RuleTemplate(x => false, "Invalid value template message {argName}", Arg.Number("argName", 666L))
                                                           .Rule(x => false).WithMessage("Invalid value custom message")
                                                           .Rule(x => false).WithCode("CODE1");

            var modelScheme = ModelSchemeFactory.Create(classSpecification);

            var error1Candidates = modelScheme.ErrorRegistry.Where(e => e.Value.Messages.Count == 1 && e.Value.Messages.Single() == "Invalid value custom message");

            error1Candidates.Should().HaveCount(1);
            var error1 = error1Candidates.Single();

            error1.Value.Codes.Should().BeEmpty();
            error1.Value.Args.Should().BeEmpty();

            var error2Candidates = modelScheme.ErrorRegistry.Where(e => e.Value.Messages.Count == 1 && e.Value.Messages.Single() == "Invalid value template message {argName}");

            error2Candidates.Should().HaveCount(1);
            var error2 = error2Candidates.Single();

            error2.Value.Codes.Should().BeEmpty();
            error2.Value.Args.Should().HaveCount(1);
            var error2Arg = error2.Value.Args.Single();

            error2Arg.Should().BeOfType <NumberArg <long> >();
            ((NumberArg <long>)error2Arg).Name.Should().Be("argName");
            ((NumberArg <long>)error2Arg).Value.Should().Be(666);

            var error3Candidates = modelScheme.ErrorRegistry.Where(e => e.Value.Codes.Count == 1 && e.Value.Codes.Single() == "CODE1");

            error3Candidates.Should().HaveCount(1);
            var error3 = error3Candidates.Single();

            error3.Value.Messages.Should().BeEmpty();
            error3.Value.Args.Should().BeEmpty();

            modelScheme.Template.Keys.Should().HaveCount(1);
            modelScheme.Template.Keys.Should().Contain("");
            modelScheme.Template[""].Should().Contain(error1.Key);
            modelScheme.Template[""].Should().Contain(error2.Key);
            modelScheme.Template[""].Should().Contain(error3.Key);
        }
示例#3
0
        public void Should_CreateModelScheme_With_Errors_And_NestedSpecifications()
        {
            Specification <TestMember> memberSpecification = c => c.Optional().RuleTemplate(x => false, "Nested template message", Arg.Number("nestedArg", 100M)).WithExtraCode("CODE_N");

            Specification <TestClass> classSpecification = c => c
                                                           .Optional()
                                                           .Member(m => m.Member, memberSpecification)
                                                           .RuleTemplate(x => false, "Invalid value template message {argName}", Arg.Number("argName", 666L))
                                                           .Rule(x => false).WithMessage("Invalid value custom message")
                                                           .Rule(x => false).WithCode("CODE1");

            var modelScheme = ModelSchemeFactory.Create(classSpecification);

            var error1Candidates = modelScheme.ErrorRegistry.Where(e => e.Value.Messages.Count == 1 && e.Value.Messages.Single() == "Invalid value template message {argName}");

            error1Candidates.Should().HaveCount(1);
            var error1 = error1Candidates.Single();

            error1.Value.Codes.Should().BeEmpty();
            error1.Value.Args.Should().HaveCount(1);
            var error1Arg = error1.Value.Args.Single();

            error1Arg.Should().BeOfType <NumberArg <long> >();
            ((NumberArg <long>)error1Arg).Name.Should().Be("argName");
            ((NumberArg <long>)error1Arg).Value.Should().Be(666);

            var error2Candidates = modelScheme.ErrorRegistry.Where(e => e.Value.Messages.Count == 1 && e.Value.Messages.Single() == "Invalid value custom message");

            error2Candidates.Should().HaveCount(1);
            var error2 = error2Candidates.Single();

            error2.Value.Codes.Should().BeEmpty();
            error2.Value.Args.Should().BeEmpty();

            var error3Candidates = modelScheme.ErrorRegistry.Where(e => e.Value.Codes.Count == 1 && e.Value.Codes.Single() == "CODE1");

            error3Candidates.Should().HaveCount(1);
            var error3 = error3Candidates.Single();

            error3.Value.Messages.Should().BeEmpty();
            error3.Value.Args.Should().BeEmpty();

            var errorNestedCandidates = modelScheme.ErrorRegistry.Where(e => e.Value.Messages.Count == 1 && e.Value.Messages.Single() == "Nested template message");

            errorNestedCandidates.Should().HaveCount(1);
            var errorNested = errorNestedCandidates.Single();

            errorNested.Value.Codes.Should().HaveCount(1);
            errorNested.Value.Codes.Single().Should().Be("CODE_N");
            errorNested.Value.Args.Should().HaveCount(1);
            var errorNestedArg = errorNested.Value.Args.Single();

            errorNestedArg.Should().BeOfType <NumberArg <decimal> >();
            (errorNestedArg as NumberArg <decimal>).Name.Should().Be("nestedArg");
            (errorNestedArg as NumberArg <decimal>).Value.Should().Be(100);

            modelScheme.Template.Keys.Should().HaveCount(2);
            modelScheme.Template.Keys.Should().Contain("");
            modelScheme.Template[""].Should().Contain(error2.Key);
            modelScheme.Template[""].Should().Contain(error2.Key);
            modelScheme.Template[""].Should().Contain(error3.Key);
            modelScheme.Template.Keys.Should().Contain("Member");
            modelScheme.Template["Member"].Should().Contain(errorNested.Key);
        }
示例#4
0
        public void Should_CreateModelScheme_And_FeedCapacityInfo_When_ShouldFeed_IsTrue()
        {
            Specification <TestClass> classSpecification = c => c
                                                           .Optional()
                                                           .RuleTemplate(x => false, "Invalid value template message {argName}", Arg.Number("argName", 666L))
                                                           .Rule(x => false).WithMessage("Invalid value custom message")
                                                           .Rule(x => false).WithCode("CODE1");

            var feedableCapacityInfo = Substitute.For <IFeedableCapacityInfo>();

            IErrorsHolder errorsHolders = null;

            feedableCapacityInfo.ShouldFeed.Returns(true);

            feedableCapacityInfo.When(x => x.Feed(NSubstitute.Arg.Any <IErrorsHolder>())).Do(callInfo =>
            {
                errorsHolders = callInfo.Arg <IErrorsHolder>();
            });

            ModelSchemeFactory.Create(classSpecification, feedableCapacityInfo);

            feedableCapacityInfo.ReceivedWithAnyArgs(1).Feed(default);
示例#5
0
        public void Should_CreateModelScheme_And_InjectCapacityInfoHelpers_When_CapacityInfo_Is_CapacityInfoHelpersConsumer(bool feedable)
        {
            Specification <TestClass> classSpecification = c => c
                                                           .Optional()
                                                           .RuleTemplate(x => false, "Invalid value template message {argName}", Arg.Number("argName", 666L))
                                                           .Rule(x => false).WithMessage("Invalid value custom message")
                                                           .Rule(x => false).WithCode("CODE1");

            var capacityInfo = feedable
                ? Substitute.For <IFeedableCapacityInfo, ICapacityInfoHelpersConsumer>()
                : Substitute.For <ICapacityInfo, ICapacityInfoHelpersConsumer>();

            ModelSchemeFactory.Create(classSpecification, capacityInfo);

            (capacityInfo as ICapacityInfoHelpersConsumer).Received(1).InjectHelpers(NSubstitute.Arg.Is(ModelSchemeFactory.CapacityInfoHelpers));
        }