public void SouldConsumePlainObjects()
        {
            var activeUser = new User {
                IsDeleted = false
            };
            var deletedUser = new User {
                IsDeleted = true
            };

            var spec = new UserActiveSpec();

            Assert.IsTrue(spec.IsSatisfiedBy(activeUser));
            Assert.IsFalse(spec.IsSatisfiedBy(deletedUser));
        }
        public void ShouldSupportConditionalLogic()
        {
            var activeAdmin = new User {
                Login = "******", IsDeleted = false
            };
            var deletedAdmin = new User {
                Login = "******", IsDeleted = true
            };

            var andSpec = new UserActiveSpec() && new UserByLoginSpec("admin");

            Assert.IsTrue(andSpec.IsSatisfiedBy(activeAdmin));
            Assert.IsFalse(andSpec.IsSatisfiedBy(deletedAdmin));

            var orSpec = new UserActiveSpec() || new UserByLoginSpec("admin");

            Assert.IsTrue(orSpec.IsSatisfiedBy(activeAdmin));
            Assert.IsTrue(orSpec.IsSatisfiedBy(deletedAdmin));

            var notSpec = !new UserByLoginSpec("admin");

            Assert.IsFalse(notSpec.IsSatisfiedBy(activeAdmin));
            Assert.IsFalse(notSpec.IsSatisfiedBy(deletedAdmin));
        }
 public UserOrSpec(string login)
 {
     Predicate = new UserActiveSpec() || new UserByLoginSpec(login);
 }