public void BuildExpression_InnerSingleObjectWithCollectionFilter_ShouldMatchCount()
        {
            // Arrange

            var filter = new UserFilterBase
            {
                Books = new BookFilterBase {
                    Title = "Normal"
                }
            };

            var query = dummyData.AsQueryable();

            // Act
            var filteredQuery = query.ApplyFilter(filter);

            Console.WriteLine(filteredQuery);
            var result = filteredQuery.ToList();

            // Assert
            var actualResult = dummyData.Where(x => x.Books.Any(a => a.Title.Contains(filter.Books.Title, StringComparison.InvariantCultureIgnoreCase))).ToList();

            Assert.True(result.Count == actualResult.Count);
            foreach (var item in actualResult)
            {
                Assert.Contains(item, actualResult);
            }
        }
        public void BuildExpression_InnerSingleObjectWithSingleParameter_ShouldMatchCount(string givenName)
        {
            // Arrange

            var filterBase = new UserFilterBase
            {
                Preferences = new PreferencesFilterBase {
                    GivenName = givenName
                }
            };

            var query = dummyData.AsQueryable();

            // Act
            var filteredQuery = query.ApplyFilter(filterBase);
            var result        = filteredQuery.ToList();

            // Assert
            var actualResult = dummyData.Where(x => x.Preferences.GivenName.EndsWith(filterBase.Preferences.GivenName)).ToList();

            Assert.True(result.Count == actualResult.Count);
            foreach (var item in actualResult)
            {
                Assert.Contains(item, actualResult);
            }
        }
        public void ApplyFilterTo_WithSingleField_ShouldMatchCount(List <User> dummyData)
        {
            // Arrange
            var filterBase = new UserFilterBase
            {
                Email = dummyData.FirstOrDefault().Email,
            };

            IQueryable <User> query = dummyData.AsQueryable();

            // Act
            var result = query.ApplyFilter(filterBase).ToList();

            // Assert
            Assert.True(result.Count == dummyData.Count(x => x.Email == filterBase.Email));
        }
        public void BuildExpression_WithContainsString_ShouldMatchCount(List <User> dummyData)
        {
            // Arrange
            var partOfName = dummyData.FirstOrDefault()?.FullName?.Substring(0, 4);
            var filterBase = new UserFilterBase
            {
                FullName = partOfName,
            };

            var query = dummyData.AsQueryable();

            // Act
            var result = query.ApplyFilter(filterBase).ToList();

            // Assert
            Assert.True(result.Count == dummyData.Count(x => x.FullName.Contains(filterBase.FullName, StringComparison.InvariantCultureIgnoreCase)));
        }
        public void ApplyFilterTo_WithTwoField_ShouldMatchCount(List <User> dummyData)
        {
            // Arrange
            var filterBase = new UserFilterBase
            {
                Email    = dummyData.FirstOrDefault().Email,
                IsActive = dummyData.FirstOrDefault().IsActive,
            };

            IQueryable <User> query = dummyData.AsQueryable();

            // Act
            filterBase.CombineWith = Enums.CombineType.And;
            var result = query.ApplyFilter(filterBase).ToList();

            filterBase.CombineWith = Enums.CombineType.Or;
            var orResult = query.ApplyFilter(filterBase).ToList();


            // Assert
            Assert.True(result.Count == dummyData.Count(x => x.Email == filterBase.Email && x.IsActive == filterBase.IsActive));
            Assert.True(orResult.Count == dummyData.Count(x => x.Email == filterBase.Email || x.IsActive == filterBase.IsActive));
        }
        public void BuildExpression_WithSingleBooleanParameter_ShouldMatchCount(bool?isActive, List <User> dummyData)
        {
            // Arrange
            var filterBase = new UserFilterBase
            {
                IsActive = isActive
            };

            var query = dummyData.AsQueryable();

            // Act
            var result = query.ApplyFilter(filterBase).ToList();

            // Assert

            Func <User, bool> condition = _ => true;

            if (isActive != null)
            {
                condition = x => x.IsActive == isActive;
            }

            Assert.True(result.Count == dummyData.Count(condition));
        }