public void ShouldReportSuccessWhenNoViolationsWereAdded()
        {
            //GIVEN
            var report = new SingleRuleReport(Any.Instance <RuleDescription>());

            //WHEN
            var isFailed = report.IsFailed();

            //THEN
            isFailed.Should().BeFalse();
        }
        public void ShouldAppendSuccessToResultBuilderWhenNoViolationsWereReported()
        {
            //GIVEN
            var ruleDescription = Any.Instance <RuleDescription>();
            var report          = new SingleRuleReport(ruleDescription);
            var resultBuilder   = Substitute.For <IResultBuilder>();

            //WHEN
            report.AppendTo(resultBuilder);

            //THEN
            resultBuilder.Received(1).AppendOk(ruleDescription);
        }
        public void ShouldReportFailureWhenAtLeastOneViolationWasAdded()
        {
            //GIVEN
            var report = new SingleRuleReport(Any.Instance <RuleDescription>());

            report.Add(Any.Instance <RuleViolation>());

            //WHEN
            var isFailed = report.IsFailed();

            //THEN
            isFailed.Should().BeTrue();
        }
        public void ShouldAppendFailureToResultBuilderWhenAtLeastOneViolationIsReported()
        {
            //GIVEN
            var ruleDescription = Any.Instance <RuleDescription>();
            var report          = new SingleRuleReport(ruleDescription);
            var resultBuilder   = Substitute.For <IResultBuilder>();
            var ruleViolation   = Any.Instance <RuleViolation>();

            report.Add(ruleViolation);

            //WHEN
            report.AppendTo(resultBuilder);

            //THEN
            resultBuilder.Received(1).AppendViolations(ruleDescription, ruleViolation.ToHumanReadableString());
        }
        public void ShouldAppendTheSameViolationDescriptionOnlyOnceNoMatterHowManyTimesItWasReported()
        {
            //GIVEN
            var ruleDescription = Any.Instance <RuleDescription>();
            var report          = new SingleRuleReport(ruleDescription);
            var resultBuilder   = Substitute.For <IResultBuilder>();
            var ruleViolation1  = Any.Instance <RuleViolation>();

            report.Add(ruleViolation1);
            report.Add(ruleViolation1);
            report.Add(ruleViolation1);

            //WHEN
            report.AppendTo(resultBuilder);

            //THEN
            resultBuilder.Received(1).AppendViolations(
                ruleDescription,
                ruleViolation1.ToHumanReadableString());
        }
        public void ShouldAppendFailureWithAllReportedViolationsInTheSameOrderTheyWereReceivedToResultBuilder()
        {
            //GIVEN
            var ruleDescription = Any.Instance <RuleDescription>();
            var report          = new SingleRuleReport(ruleDescription);
            var resultBuilder   = Substitute.For <IResultBuilder>();
            var ruleViolation1  = Any.Instance <RuleViolation>();
            var ruleViolation2  = Any.Instance <RuleViolation>();
            var ruleViolation3  = Any.Instance <RuleViolation>();

            report.Add(ruleViolation1);
            report.Add(ruleViolation2);
            report.Add(ruleViolation3);

            //WHEN
            report.AppendTo(resultBuilder);

            //THEN
            resultBuilder.Received(1).AppendViolations(ruleDescription,
                                                       $"{ruleViolation1.ToHumanReadableString()}{NewLine}" +
                                                       $"{ruleViolation2.ToHumanReadableString()}{NewLine}" +
                                                       $"{ruleViolation3.ToHumanReadableString()}");
        }