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