public void ShouldWorkWithEnumerable()
        {
            var users = new[]
            {
                new User {
                    Login = "******", IsDeleted = false
                },
                new User {
                    Login = "******", IsDeleted = true
                },
            };

            var andSpec = new UserAndSpec("admin");

            users.Where(andSpec.IsSatisfiedBy).Single();

            users.Where(andSpec).Single();
        }
        public void ShouldSupportComposition()
        {
            var activeAdmin = new User {
                Login = "******", IsDeleted = false
            };
            var deletedAdmin = new User {
                Login = "******", IsDeleted = true
            };

            var andSpec = new UserAndSpec("admin");

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

            var orSpec = new UserOrSpec("admin");

            Assert.IsTrue(orSpec.IsSatisfiedBy(activeAdmin));
            Assert.IsTrue(orSpec.IsSatisfiedBy(deletedAdmin));
        }
        public void ShouldWorkWithQueryable()
        {
            using (var context = CreateSqliteDbContext())
            {
                context.Users.AddRange(new[]
                {
                    new User {
                        Login = "******", IsDeleted = false
                    },
                    new User {
                        Login = "******", IsDeleted = true
                    },
                });

                context.SaveChanges();

                var andSpec = new UserAndSpec("admin");

                context.Users.Where(andSpec.ToExpression()).Single();

                context.Users.Where(andSpec).Single();
            }
        }