public void ShouldNotBeSnappableIfAllRulesReturnFalse()
        {
            var ruleMock = new Mock <IRule>();

            ruleMock.Setup(x => x.CanSnap(It.IsAny <Cards>())).Returns(false);
            var rules = new List <IRule> {
                ruleMock.Object, ruleMock.Object
            };

            var  stack         = Cards.Empty();
            var  snapValidator = new SnapValidator();
            bool canSnap       = snapValidator.CanSnap(stack, rules);

            Assert.That(canSnap, Is.False);
        }
        public void ShouldPassStackToRule()
        {
            var ruleMock = new Mock <IRule>();

            ruleMock.Setup(x => x.CanSnap(It.IsAny <Cards>())).Returns(false);
            var rules = new List <IRule> {
                ruleMock.Object
            };

            var stack         = Cards.Empty();
            var snapValidator = new SnapValidator();

            snapValidator.CanSnap(stack, rules);

            ruleMock.Verify(r => r.CanSnap(stack), Times.Once());
        }
        public void ShouldBeSnappableIfARuleReturnsTrue()
        {
            var falseRuleMock = new Mock <IRule>();
            var trueRuleMock  = new Mock <IRule>();

            falseRuleMock.Setup(x => x.CanSnap(It.IsAny <Cards>())).Returns(false);
            trueRuleMock.Setup(x => x.CanSnap(It.IsAny <Cards>())).Returns(true);
            var rules = new List <IRule> {
                falseRuleMock.Object, trueRuleMock.Object
            };

            var  stack         = Cards.Empty();
            var  snapValidator = new SnapValidator();
            bool canSnap       = snapValidator.CanSnap(stack, rules);

            Assert.That(canSnap, Is.True);
        }