public void ShouldProduceNothingOnOutputWhenApplyForIntegerNotDivisibleBy15()
        {
            var input         = Any.IntegerNotDivisibleBy(15);
            var outputBuilder = Substitute.For <IOutputBuilder>();
            var rule          = new DivisibleBy15Rule(false, Any.InstanceOf <IRule>(), outputBuilder);

            rule.Apply(input);

            outputBuilder.DidNotReceive().Append(Arg.Any <string>());
        }
        public void ShouldProduceFizzBuzzOnOutputWhenApplyForIntegerDivisibleBy15()
        {
            var input         = Any.IntegerDivisibleBy(15);
            var outputBuilder = Substitute.For <IOutputBuilder>();
            var rule          = new DivisibleBy15Rule(false, Any.InstanceOf <IRule>(), outputBuilder);

            rule.Apply(input);

            outputBuilder.Received().Append("FizzBuzz");
        }
        public void ShouldNotCallSuccessorWhenApplyIsCalledAndIsBreakable()
        {
            var input         = Any.IntegerDivisibleBy(15);
            var outputBuilder = Substitute.For <IOutputBuilder>();
            var successor     = Substitute.For <IRule>();
            var rule          = new DivisibleBy15Rule(true, successor, outputBuilder);

            rule.Apply(input);

            outputBuilder.Received().Append("FizzBuzz");
            successor.DidNotReceive().Apply(input);
        }
        public void ShouldCallSuccessorWhenApplyIsCalledAndRuleDoesNotMatches()
        {
            var input         = Any.IntegerNotDivisibleBy(15);
            var successor     = Substitute.For <IRule>();
            var outputBuilder = Substitute.For <IOutputBuilder>();
            var rule          = new DivisibleBy15Rule(false, successor, outputBuilder);

            rule.Apply(input);

            outputBuilder.DidNotReceive().Append(Arg.Any <string>());
            successor.Received().Apply(input);
        }