Inheritance: IMortgageApplicationSpecification
        public void SutDoesNotEqualOtherWithDifferentSpecifications()
        {
            // Arrange
            var sut = new AndMortgageApplicationSpecification
            {
                Specifications = new[]
                {
                    new Mock<IMortgageApplicationSpecification>().Object,
                    new Mock<IMortgageApplicationSpecification>().Object,
                    new Mock<IMortgageApplicationSpecification>().Object
                }
            };

            var other = new AndMortgageApplicationSpecification
            {
                Specifications = new[]
                {
                    new Mock<IMortgageApplicationSpecification>().Object,
                    new Mock<IMortgageApplicationSpecification>().Object,
                    new Mock<IMortgageApplicationSpecification>().Object
                }
            };

            // Act
            var actual = sut.Equals(other);

            // Assert
            Assert.False(actual);
        }
        public void IsSatisfiedByReturnsCorrectResult(
            bool b1,
            bool b2,
            bool b3,
            bool expected)
        {
            // Arrange
            var application = new MortgageApplication();

            var spec1 = new Mock<IMortgageApplicationSpecification>();
            var spec2 = new Mock<IMortgageApplicationSpecification>();
            var spec3 = new Mock<IMortgageApplicationSpecification>();
            spec1.Setup(s => s.IsSatisfiedBy(application)).Returns(b1);
            spec2.Setup(s => s.IsSatisfiedBy(application)).Returns(b2);
            spec3.Setup(s => s.IsSatisfiedBy(application)).Returns(b3);

            var sut = new AndMortgageApplicationSpecification
            {
                Specifications = new[] { spec1.Object, spec2.Object, spec3.Object }
            };

            // Act
            var actual = sut.IsSatisfiedBy(application);

            // Assert
            Assert.Equal(expected, actual);
        }
        public void SutDoesNotEqualAnonymousObject()
        {
            var sut = new AndMortgageApplicationSpecification();
            var anonymous = new object();

            var actual = sut.Equals(anonymous);

            Assert.False(actual);
        }
        public void SutEqualsOtherWithSameSpecifications()
        {
            // Arrange
            var spec1 = new Mock<IMortgageApplicationSpecification>();
            var spec2 = new Mock<IMortgageApplicationSpecification>();
            var spec3 = new Mock<IMortgageApplicationSpecification>();

            var sut = new AndMortgageApplicationSpecification
            {
                Specifications = new[] { spec1.Object, spec2.Object, spec3.Object }
            };

            var other = new AndMortgageApplicationSpecification
            {
                Specifications = new[] { spec1.Object, spec2.Object, spec3.Object }
            };

            // Act
            var actual = sut.Equals(other);

            // Assert
            Assert.True(actual);
        }
 public void SutIsMortgageApplicationProcessor()
 {
     var sut = new AndMortgageApplicationSpecification();
     Assert.IsAssignableFrom<IMortgageApplicationSpecification>(sut);
 }