Beispiel #1
0
        public void ShouldSupportNullable()
        {
            // Given
            var entity = new FilterTestEntity {
                NullableIntField = 1
            };

            var specification = new FilterSpecification <FilterTestEntity>(
                builder => builder.Or(condition => condition
                                      .Equal(i => i.NullableIntField, 10)
                                      .NotEqual(i => i.NullableIntField, 1)
                                      .Greater(i => i.NullableIntField, 10)
                                      .GreaterOrEqual(i => i.NullableIntField, 10)
                                      .Less(i => i.NullableIntField, 0)
                                      .LessOrEqual(i => i.NullableIntField, 0)
                                      .In(i => i.NullableIntField, new int?[] { 0, 2, 4 })
                                      .NotIn(i => i.NullableIntField, new int?[] { 1, 3, 5 })
                                      .Between(i => i.NullableIntField, 5, 10)
                                      .NotBetween(i => i.NullableIntField, 0, 5)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsFalse(result);
        }
Beispiel #2
0
        public void ShouldBuildOperatorDuringTheCall()
        {
            // Given
            var entity = new FilterTestEntity();

            var operatorMock = new Mock <IFilterOperator>();

            operatorMock.Setup(o => o.CreateFilter()).Returns((Expression <Func <FilterTestEntity, bool> >)(item => true));

            var specification = new FilterSpecification <FilterTestEntity>(b => operatorMock.Object);

            // When
            specification.IsSatisfiedBy(entity);
            specification.IsSatisfiedBy(entity);
            specification.IsSatisfiedBy(entity);

            // Then
            operatorMock.Verify(o => o.CreateFilter(), Times.Exactly(3));
        }
        public void SholdSupportEqualOperator()
        {
            // Given
            const int value = 10;
            var entity = new FilterTestEntity { IntField = value };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.Equal(i => i.IntField, value)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }
Beispiel #4
0
        public void ShouldSupportLessOrEqualOperator([Range(0, 5)] int value)
        {
            // Given
            var entity = new FilterTestEntity {
                IntField = 3
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.LessOrEqual(i => i.IntField, value)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(entity.IntField <= value, result);
        }
Beispiel #5
0
        public void ShouldSupportNotNullOperator()
        {
            // Given
            var entity = new FilterTestEntity {
                StringField = "NotNull"
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.NotNull(i => i.StringField)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }
Beispiel #6
0
        public void ShouldSupportNotBetweenOperator([Range(0, 5)] int value)
        {
            // Given
            var entity = new FilterTestEntity {
                IntField = value
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.NotBetween(i => i.IntField, 1, 4)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(!(entity.IntField >= 1 && entity.IntField <= 4), result);
        }
Beispiel #7
0
        public void ShouldSupportEndsWithOperator()
        {
            // Given
            var entity = new FilterTestEntity {
                StringField = "12345"
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.EndsWith(i => i.StringField, "45")));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }
Beispiel #8
0
        public void ShouldSupportNotContainsOperatorForString()
        {
            // Given
            var entity = new FilterTestEntity {
                StringField = "54321"
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.NotContains(i => i.StringField, "234")));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }
Beispiel #9
0
        public void ShouldSupportNotContainsOperatorForCollection([Range(0, 5)] int value)
        {
            // Given
            var entity = new FilterTestEntity {
                CollectionField = new[] { 1, 2, 3 }
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.NotContains(i => i.CollectionField, value)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(!entity.CollectionField.Contains(value), result);
        }
Beispiel #10
0
        public void ShouldSupportNotInOperator([Range(0, 5)] int value)
        {
            // Given
            var set    = new[] { 1, 2, 3 };
            var entity = new FilterTestEntity {
                IntField = value
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.NotIn(i => i.IntField, set)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(!set.Contains(value), result);
        }
Beispiel #11
0
        public void SholdSupportNotEqualOperator()
        {
            // Given
            const int value  = 10;
            var       entity = new FilterTestEntity {
                IntField = value + 1
            };
            var specification = new FilterSpecification <FilterTestEntity>(f => f.And(c => c.NotEqual(i => i.IntField, value)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }
Beispiel #12
0
        public void ShouldSupportComplexConditions([Range(0, 3)] int intField, [Range(0, 3)] int stringField)
        {
            // Given
            var entity = new FilterTestEntity {
                IntField = intField, StringField = stringField.ToString()
            };

            var specification = new FilterSpecification <FilterTestEntity>(
                f => f.And(c => c
                           .NotNull(i => i.StringField)
                           .In(i => i.IntField, new[] { 1, 2 })
                           .Or(or1 => or1.Equal(i => i.IntField, 1).StartsWith(i => i.StringField, "1"))
                           .Or(or2 => or2.Equal(i => i.IntField, 2).StartsWith(i => i.StringField, "2"))));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(entity.StringField != null &&
                            new[] { 1, 2 }.Contains(entity.IntField) &&
                            (entity.IntField == 1 || entity.StringField == "1") &&
                            (entity.IntField == 2 || entity.StringField == "2")
                            , result);
        }
        public void ShouldSupportLessOrEqualOperator([Range(0, 5)] int value)
        {
            // Given
            var entity = new FilterTestEntity { IntField = 3 };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.LessOrEqual(i => i.IntField, value)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(entity.IntField <= value, result);
        }
        public void ShouldSupportNotBetweenOperator([Range(0, 5)] int value)
        {
            // Given
            var entity = new FilterTestEntity { IntField = value };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.NotBetween(i => i.IntField, 1, 4)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(!(entity.IntField >= 1 && entity.IntField <= 4), result);
        }
        public void ShouldSupportNotInOperator([Range(0, 5)] int value)
        {
            // Given
            var set = new[] { 1, 2, 3 };
            var entity = new FilterTestEntity { IntField = value };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.NotIn(i => i.IntField, set)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(!set.Contains(value), result);
        }
        public void ShouldSupportComplexConditions([Range(0, 3)] int intField, [Range(0, 3)] int stringField)
        {
            // Given
            var entity = new FilterTestEntity { IntField = intField, StringField = stringField.ToString() };

            var specification = new FilterSpecification<FilterTestEntity>(
                f => f.And(c => c
                                    .NotNull(i => i.StringField)
                                    .In(i => i.IntField, new[] { 1, 2 })
                                    .Or(or1 => or1.Equal(i => i.IntField, 1).StartsWith(i => i.StringField, "1"))
                                    .Or(or2 => or2.Equal(i => i.IntField, 2).StartsWith(i => i.StringField, "2"))));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(entity.StringField != null
                            && new[] { 1, 2 }.Contains(entity.IntField)
                            && (entity.IntField == 1 || entity.StringField == "1")
                            && (entity.IntField == 2 || entity.StringField == "2")
                            , result);
        }
        public void ShouldSupportNotContainsOperatorForCollection([Range(0, 5)] int value)
        {
            // Given
            var entity = new FilterTestEntity { CollectionField = new[] { 1, 2, 3 } };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.NotContains(i => i.CollectionField, value)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.AreEqual(!entity.CollectionField.Contains(value), result);
        }
        public void ShouldSupportStartsWithOperator()
        {
            // Given
            var entity = new FilterTestEntity { StringField = "12345" };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.StartsWith(i => i.StringField, "12")));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }
        public void ShouldSupportNullOperator()
        {
            // Given
            var entity = new FilterTestEntity { StringField = null };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.Null(i => i.StringField)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }
        public void ShouldSupportNullable()
        {
            // Given
            var entity = new FilterTestEntity { NullableIntField = 1 };

            var specification = new FilterSpecification<FilterTestEntity>(
                builder => builder.Or(condition => condition
                                                       .Equal(i => i.NullableIntField, 10)
                                                       .NotEqual(i => i.NullableIntField, 1)
                                                       .Greater(i => i.NullableIntField, 10)
                                                       .GreaterOrEqual(i => i.NullableIntField, 10)
                                                       .Less(i => i.NullableIntField, 0)
                                                       .LessOrEqual(i => i.NullableIntField, 0)
                                                       .In(i => i.NullableIntField, new int?[] { 0, 2, 4 })
                                                       .NotIn(i => i.NullableIntField, new int?[] { 1, 3, 5 })
                                                       .Between(i => i.NullableIntField, 5, 10)
                                                       .NotBetween(i => i.NullableIntField, 0, 5)));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsFalse(result);
        }
        public void ShouldBuildOperatorDuringTheCall()
        {
            // Given
            var entity = new FilterTestEntity();

            var operatorMock = new Mock<IFilterOperator>();
            operatorMock.Setup(o => o.CreateFilter()).Returns((Expression<Func<FilterTestEntity, bool>>)(item => true));

            var specification = new FilterSpecification<FilterTestEntity>(b => operatorMock.Object);

            // When
            specification.IsSatisfiedBy(entity);
            specification.IsSatisfiedBy(entity);
            specification.IsSatisfiedBy(entity);

            // Then
            operatorMock.Verify(o => o.CreateFilter(), Times.Exactly(3));
        }
        public void ShouldSupportNotContainsOperatorForString()
        {
            // Given
            var entity = new FilterTestEntity { StringField = "54321" };
            var specification = new FilterSpecification<FilterTestEntity>(f => f.And(c => c.NotContains(i => i.StringField, "234")));

            // When
            var result = specification.IsSatisfiedBy(entity);

            // Then
            Assert.IsTrue(result);
        }