public void FacetRangeParameter015()
        {
            // Arrange
            var expected          = JObject.Parse(@"
            {
              ""facet"": {
                ""X"": {
                  ""range"": {
                    ""field"": ""{!ex=tag1,tag2}_id_"",
                    ""mincount"": 1,
                    ""gap"": ""1"",
                    ""start"": ""10"",
                    ""end"": ""20"",
                    ""other"": [
                      ""before"",
                      ""after""
                    ]
                  }
                }
              }
            }").ToString();
            var jObject           = new JObject();
            var expressionCache   = new ExpressionCache <TestDocument>();
            var expressionBuilder = (IExpressionBuilder <TestDocument>) new ExpressionBuilder <TestDocument>(expressionCache);
            var parameter         = new FacetRangeParameter <TestDocument>(expressionBuilder);

            parameter.Configure("X", q => q.Id, "1", "10", "20", true, true, excludes: new[] { "tag1", "tag2" });

            // Act
            parameter.Execute(jObject);
            var actual = jObject.ToString();

            // Assert
            Assert.Equal(expected, actual);
        }
        public void FacetRangeParameter016()
        {
            // Arrange / Act / Assert
            var expressionCache   = new ExpressionCache <TestDocument>();
            var expressionBuilder = (IExpressionBuilder <TestDocument>) new ExpressionBuilder <TestDocument>(expressionCache);
            var parameter         = new FacetRangeParameter <TestDocument>(expressionBuilder);

            // Act / Assert
            Assert.Throws <ArgumentNullException>(() => parameter.Configure("x", q => q.Id, "", "", null));
        }
        public void FacetRangeParamete011()
        {
            // Arrange
            var container         = new List <string>();
            var expressionCache   = new ExpressionCache <TestDocument>();
            var expressionBuilder = (IExpressionBuilder <TestDocument>) new ExpressionBuilder <TestDocument>(expressionCache);
            var parameter         = new FacetRangeParameter <TestDocument>(expressionBuilder);

            parameter.Configure("X", q => q.Id, "1", "10", "20", true, true, FacetSortType.IndexDesc);

            // Act / Assert
            Assert.Throws <UnsupportedSortTypeException>(() => parameter.Execute(container));
        }
        public void FacetRangeParameter003()
        {
            // Arrange
            bool   isValid;
            string errorMessage;
            var    expressionCache   = new ExpressionCache <TestDocumentWithAnyPropertyTypes>();
            var    expressionBuilder = (IExpressionBuilder <TestDocumentWithAnyPropertyTypes>) new ExpressionBuilder <TestDocumentWithAnyPropertyTypes>(expressionCache);
            var    parameter         = new FacetRangeParameter <TestDocumentWithAnyPropertyTypes>(expressionBuilder);

            parameter.Configure("X", q => q.PropInteger, "1", "10", "20", true, true, FacetSortType.CountDesc);

            // Act
            parameter.Validate(out isValid, out errorMessage);

            // Assert
            Assert.True(isValid);
            Assert.True(string.IsNullOrWhiteSpace(errorMessage));
        }
        public void FacetRangeParameter002()
        {
            // Arrange
            var    expected = JObject.Parse(@"
            {
              ""facet"": {
                ""X"": {
                  ""range"": {
                    ""field"": ""_id_"",
                    ""mincount"": 1,
                    ""gap"": ""1"",
                    ""start"": ""10"",
                    ""end"": ""20"",
                    ""other"": [
                      ""before"",
                      ""after""
                    ],
                    ""sort"": {
                      ""count"": ""desc""
                    }
                  }
                }
              }
            }");
            string actual;
            var    jObject           = new JObject();
            var    expressionCache   = new ExpressionCache <TestDocument>();
            var    expressionBuilder = (IExpressionBuilder <TestDocument>) new ExpressionBuilder <TestDocument>(expressionCache);
            var    parameter         = new FacetRangeParameter <TestDocument>(expressionBuilder);

            parameter.Configure("X", q => q.Id, "1", "10", "20", true, true, FacetSortType.CountDesc);

            // Act
            parameter.Execute(jObject);
            actual = jObject.ToString();

            // Assert
            Assert.Equal(expected.ToString(), actual);
        }
        public void FacetRangeParameter020()
        {
            // Arrange
            var container         = new List <string>();
            var expressionCache   = new ExpressionCache <TestDocument>();
            var expressionBuilder = (IExpressionBuilder <TestDocument>) new ExpressionBuilder <TestDocument>(expressionCache);
            var parameter         = new FacetRangeParameter <TestDocument>(expressionBuilder);

            parameter.Configure("X", q => q.Id, "1", "10", "20", true, false, FacetSortType.CountAsc);

            // Act
            parameter.Execute(container);

            // Assert
            Assert.Equal(8, container.Count);
            Assert.Equal("facet=true", container[0]);
            Assert.Equal("facet.range={!key=X}_id_", container[1]);
            Assert.Equal("f._id_.facet.range.gap=1", container[2]);
            Assert.Equal("f._id_.facet.range.start=10", container[3]);
            Assert.Equal("f._id_.facet.range.end=20", container[4]);
            Assert.Equal("f._id_.facet.range.other=before", container[5]);
            Assert.Equal("f._id_.facet.range.sort=count", container[6]);
            Assert.Equal("f._id_.facet.mincount=1", container[7]);
        }
        public void FacetRangeParameter018()
        {
            // Arrange
            var container         = new List <string>();
            var expressionCache   = new ExpressionCache <TestDocument>();
            var expressionBuilder = (IExpressionBuilder <TestDocument>) new ExpressionBuilder <TestDocument>(expressionCache);
            var parameter         = new FacetRangeParameter <TestDocument>(expressionBuilder);

            parameter.Configure("X", q => q.Id, "+7DAY", "NOW-21DAYS", "NOW+1DAY", true, true);

            // Act
            parameter.Execute(container);

            // Assert
            Assert.Equal(8, container.Count);
            Assert.Equal("facet=true", container[0]);
            Assert.Equal("facet.range={!key=X}_id_", container[1]);
            Assert.Equal("f._id_.facet.range.gap=%2B7DAY", container[2]);
            Assert.Equal("f._id_.facet.range.start=NOW-21DAYS", container[3]);
            Assert.Equal("f._id_.facet.range.end=NOW%2B1DAY", container[4]);
            Assert.Equal("f._id_.facet.range.other=before", container[5]);
            Assert.Equal("f._id_.facet.range.other=after", container[6]);
            Assert.Equal("f._id_.facet.mincount=1", container[7]);
        }
        public void FacetRangeParameter017()
        {
            // Arrange
            var container         = new List <string>();
            var expressionCache   = new ExpressionCache <TestDocument>();
            var expressionBuilder = (IExpressionBuilder <TestDocument>) new ExpressionBuilder <TestDocument>(expressionCache);
            var parameter         = new FacetRangeParameter <TestDocument>(expressionBuilder);

            parameter.Configure("X", q => q.Id, "1", "10", "20", true, true, excludes: new[] { "tag1", "tag2" });

            // Act
            parameter.Execute(container);

            // Assert
            Assert.Equal(8, container.Count);
            Assert.Equal("facet=true", container[0]);
            Assert.Equal("facet.range={!ex=tag1,tag2 key=X}_id_", container[1]);
            Assert.Equal("f._id_.facet.range.gap=1", container[2]);
            Assert.Equal("f._id_.facet.range.start=10", container[3]);
            Assert.Equal("f._id_.facet.range.end=20", container[4]);
            Assert.Equal("f._id_.facet.range.other=before", container[5]);
            Assert.Equal("f._id_.facet.range.other=after", container[6]);
            Assert.Equal("f._id_.facet.mincount=1", container[7]);
        }