public void iqueryable_should_be_sorted_correctly()
        {
            var now = DateTime.Now;

            var source = new[]
            {
                new DummyDocument
                {
                    Name = "Middle",
                    CreatedAt = now
                },
                new DummyDocument
                {
                    Name = "Last",
                    CreatedAt = now.AddHours(1)
                },
                new DummyDocument
                {
                    Name = "First",
                    CreatedAt = now.AddHours(-1)
                }
            }
            .AsQueryable();

            var sortedData = source.DynamicOrderBy("createdAt", "asceNding");
            var expectedSortedData = source.OrderBy(document => document.CreatedAt);

            sortedData.SequenceEqual(expectedSortedData).Should().BeTrue();
        }
        public void iquerable_should_be_sorted_correctly()
        {
            var now = DateTime.Now;

            var source = new[]
            {
                new DummyDocument
                {
                    Name = "Middle",
                    CreatedAt = now
                },
                new DummyDocument
                {
                    Name = "Last",
                    CreatedAt = now.AddHours(1)
                },
                new DummyDocument
                {
                    Name = "First",
                    CreatedAt = now.AddHours(-1)
                }
            }
            .AsQueryable();

            var sortedData = source.DynamicOrderBy(
                new OrderByRequest(
                    propertyName: "createdAt",
                    direction: OrderByDirection.Descending));
            var expectedSortedData = source.OrderByDescending(document => document.CreatedAt);

            sortedData.SequenceEqual(expectedSortedData).Should().BeTrue();
        }
        public void iquerable_should_be_sorted_correctly()
        {
            var now = DateTime.Now;

            var source = new[]
            {
                new DummyDocument
                {
                    Name = "Middle",
                    CreatedAt = now,
                    ComplexType = new DummyPropertyDocument
                    {
                        DummyInteger = 5, 
                        DummyString = "f",
                        InnerComplexType = new DummyInnerPropertyDocument
                        {
                            DummyInnerInteger = 2
                        }
                    }
                },
                new DummyDocument
                {
                    Name = "Last",
                    CreatedAt = now.AddHours(1),
                    ComplexType = new DummyPropertyDocument
                    {
                        DummyInteger = 3,
                        DummyString = "z",
                        InnerComplexType = new DummyInnerPropertyDocument
                        {
                            DummyInnerInteger = 3
                        }
                    }
                },
                new DummyDocument
                {
                    Name = "First",
                    CreatedAt = now.AddHours(-1),
                    ComplexType = new DummyPropertyDocument
                    {
                        DummyInteger = 8, 
                        DummyString = "a", 
                        InnerComplexType = new DummyInnerPropertyDocument
                        {
                            DummyInnerInteger = 1
                        }
                    }
                }
            }
            .AsQueryable();

            var sortedData = source.DynamicOrderBy(new OrderByRequest(
                propertyName: "complexType.innerComplexType.DummyInnerInteger",
                direction: OrderByDirection.Ascending));
            var expectedSortedData = source.OrderBy(document => document.ComplexType.InnerComplexType.DummyInnerInteger);

            sortedData.SequenceEqual(expectedSortedData).Should().BeTrue();
        }
        public void iquerable_should_be_sorted_correctly()
        {
            var now = DateTime.Now;

            var source = new[]
            {
                new DummyDocument
                {
                    Name = "Middle-2",
                    CreatedAt = now,
                    Count = 1,
                    ComplexType = new DummyPropertyDocument
                    {
                        DummyString = "b"
                    } 
                },
                new DummyDocument
                {
                    Name = "Middle",
                    CreatedAt = now,
                    Count = 10,
                    ComplexType = new DummyPropertyDocument
                    {
                        DummyString = "d"
                    } 
                },
                new DummyDocument
                {
                    Name = "Last",
                    CreatedAt = now.AddHours(1),
                    Count = 20,
                    ComplexType = new DummyPropertyDocument
                    {
                        DummyString = "a"
                    } 
                },
                new DummyDocument
                {
                    Name = "First",
                    CreatedAt = now.AddHours(-1),
                    Count= 0,
                    ComplexType = new DummyPropertyDocument
                    {
                        DummyString = "f"
                    } 
                }
            }
            .AsQueryable();

            var orderByRequest = new OrderByRequest("ComplexType.dummyString", OrderByDirection.Descending);
            orderByRequest.AddThenByRequest("count", OrderByDirection.Descending);

            var sortedData = source.DynamicOrderBy(
                orderByRequest);
            var expectedSortedData = source.OrderByDescending(document => document.ComplexType.DummyString).ThenByDescending(document => document.Count);

            sortedData.SequenceEqual(expectedSortedData).Should().BeTrue();
        }
        public void iquerable_should_be_sorted_correctly()
        {
            var now = DateTime.Now;

            var source = new[]
            {
                new DummyDocument
                {
                    Name = "Middle",
                    CreatedAt = now,
                    Count = 2
                },
                 new DummyDocument
                {
                    Name = "Middle",
                    CreatedAt = now,
                    Count = 0
                },
                new DummyDocument
                {
                    Name = "Middle-2",
                    CreatedAt = now,
                    Count = 10
                },
                new DummyDocument
                {
                    Name = "Middle",
                    CreatedAt = now,
                    Count = 1
                },
                new DummyDocument
                {
                    Name = "Last",
                    CreatedAt = now.AddHours(1),
                    Count = 20
                },
                new DummyDocument
                {
                    Name = "First",
                    CreatedAt = now.AddHours(-1),
                    Count= 0
                }
            }
            .AsQueryable();

            var orderByRequest = new OrderByRequest(
                propertyName: "createdAt",
                direction: OrderByDirection.Ascending);
            orderByRequest.AddThenByRequest("count", OrderByDirection.Ascending);

            var sortedData = source.DynamicOrderBy(orderByRequest);
            var expectedSortedData = source
                .OrderBy(document => document.CreatedAt)
                .ThenBy(document => document.Count);

            sortedData.SequenceEqual(expectedSortedData).Should().BeTrue();
        }