public void Or_a_function_creates_combined_function_which_must_satisfy_either(Person personOne,
                                                                                      Person personTwo,
                                                                                      Person personThree)
        {
            // Arrange
            personOne.Identity   = 1;
            personOne.Name       = "Bob";
            personTwo.Identity   = 2;
            personTwo.Name       = "Anna";
            personThree.Identity = 3;
            personThree.Name     = "Jo";

            var firstSpec  = new PersonIdentifierSpecificationExpression(3);
            var secondSpec = new PersonNameSpecificationFunction("Anna");

            var combinedSpec = firstSpec.Or(secondSpec);

            var people = new[] { personOne, personTwo, personThree };

            // Act
            var result = people.Where(combinedSpec).ToArray();

            // Assert
            Assert.That(result, Is.EquivalentTo(new[] { personTwo, personThree }));
        }
        public void And_creates_combined_expression_which_must_satisfy_both(Person personOne,
                                                                            Person personTwo,
                                                                            Person personThree)
        {
            // Arrange
            personOne.Identity   = 1;
            personOne.Name       = "Bob";
            personTwo.Identity   = 2;
            personTwo.Name       = "Anna";
            personThree.Identity = 3;
            personThree.Name     = "Anna";

            var firstSpec  = new PersonNameSpecificationExpression("Anna");
            var secondSpec = new PersonIdentifierSpecificationExpression(2);

            var combinedSpec = firstSpec.And(secondSpec);

            var people = new[] { personOne, personTwo, personThree }.AsQueryable();

            var result = people.Where(combinedSpec).ToArray();

            Assert.That(result, Is.EquivalentTo(new[] { personTwo }));
        }