public void TestMultipleCases()
        {
            var filterRequests = new List <FilterRequest>
            {
                new FilterRequest("p1", FilterType.Equals, "p1"),
                new FilterRequest("p3", FilterType.Contains, "p3"),
                new FilterRequest("p4", FilterType.LessThan, "p4"),
                new FilterRequest("p5", FilterType.GreaterThan, "p5"),
                new FilterRequest("p6", FilterType.LessThanOrEqual, "p6"),
                new FilterRequest("p7", FilterType.GreaterThanOrEqual, "p7"),
            };
            var context = new HttpContextStorage();

            foreach (var filterRequest in filterRequests)
            {
                var prefix = FilterByClientRequestInterpreter.FilterTypeMap
                             .Where(p => p.Value == filterRequest.FilterType)
                             .Select(p => p.Key)
                             .First();
                context.SetValue(filterRequest.Property, $"{prefix}{filterRequest.Filter}");
            }

            var interpreter = new FilterByClientRequestInterpreter(
                context, new MockPropertyNameResolver());
            var result = interpreter
                         .ParseRequestQuery(filterRequests.Select(r => r.Property).ToList())
                         .ToList();

            foreach (var filterRequest in filterRequests)
            {
                Assert.Contains(filterRequest, result, new PropertyComparer <FilterRequest>());
            }
        }
        public void TestEmptyCase()
        {
            var interpreter = new FilterByClientRequestInterpreter(
                new HttpContextStorage(), new MockPropertyNameResolver());
            var result = interpreter.ParseRequestQuery(new[] { "p1", "p2" });

            Assert.Empty(result);
        }
        public void TestEquals()
        {
            var interpreter = new FilterByClientRequestInterpreter(
                new HttpContextStorage().SetValue(Property.ToLower(), $"={Filter}"),
                new MockPropertyNameResolver());
            var result = interpreter.ParseRequestQuery(new[] { Property }).ToList();

            Assert.Single(result);
            var request = result.First();

            Assert.Equal(FilterType.Equals, request.FilterType);
            Assert.Equal(Property, request.Property);
            Assert.Equal(Filter, request.Filter);
        }
        // ReSharper disable once UnusedParameter.Local
        // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local
        private void TestSingleFilterCase(string filterPrefix, FilterType expectedType)
        {
            var interpreter = new FilterByClientRequestInterpreter(
                new HttpContextStorage().SetValue(Property.ToLower(), $"{filterPrefix}{Filter}"),
                new MockPropertyNameResolver());
            var result = interpreter.ParseRequestQuery(new[] { Property }).ToList();

            Assert.Single(result);
            var request = result.First();

            Assert.Equal(expectedType, request.FilterType);
            Assert.Equal(Property, request.Property);
            Assert.Equal(Filter, request.Filter);
        }