public void FilteredEnumerable_Sort()
        {
            ODataTest(() =>
            {
                // ARRANGE-1 Sort by Name desc
                var allContentTypes = ContentType.GetContentTypes();
                var refNodes        = new NodeList <Node>(allContentTypes.Select(ct => ct.Id).ToArray());
                var sort1           = new[] { new SortInfo("Name", true) };
                var expectedNames1  = allContentTypes
                                      .OrderByDescending(x => x.Name)
                                      .Select(x => x.Name).ToArray();
                // ACTION-1
                var enumerable1 = new FilteredContentEnumerable(refNodes, null, sort1, 0, 0);
                // ASSERT-1
                var actualNames1 = enumerable1.Select(x => x.Name).ToArray();
                AssertSequenceEqual(expectedNames1, actualNames1);

                // ARRANGE-2 Sort by ParentId, Name
                var sort2          = new[] { new SortInfo("ParentId"), new SortInfo("Name") };
                var expectedNames2 = allContentTypes
                                     .OrderBy(x => x.ParentId).ThenBy(x => x.Name)
                                     .Select(x => x.Name).ToArray();
                // ACTION-2
                var enumerable2 = new FilteredContentEnumerable(refNodes, null, sort2, 0, 0);
                // ASSERT-2
                var actualNames2 = enumerable2.Select(x => x.Name).ToArray();
                AssertSequenceEqual(expectedNames2, actualNames2);
            });
        }
        public void FilteredEnumerable_NodeOrContent()
        {
            ODataTest(() =>
            {
                var refNodes    = new NodeList <Node>(ContentType.GetContentTypes().Select(ct => ct.Id).ToArray());
                var refContents = refNodes.Select(Content.Create).ToArray();

                var enumerable1 = new FilteredContentEnumerable(refNodes, null, null, 5, 0);
                var enumerable2 = new FilteredContentEnumerable(refContents, null, null, 5, 0);

                var a = enumerable1.Select(x => x.Name).ToArray();
                var b = enumerable2.Select(x => x.Name).ToArray();
                AssertSequenceEqual(a, b);
            });
        }
 public void FilteredEnumerable_Windowed()
 {
     ODataTest(() =>
     {
         // ARRANGE
         var allContentTypes = ContentType.GetContentTypes();
         var refNodes        = new NodeList <Node>(allContentTypes.Select(ct => ct.Id).ToArray());
         var sort            = new[] { new SortInfo("Name", true) };
         var expectedNames   = allContentTypes
                               .OrderByDescending(x => x.Name)
                               .Skip(5).Take(10)
                               .Select(x => x.Name).ToArray();
         // ACTION (two windows)
         var enumerable1 = new FilteredContentEnumerable(refNodes, null, sort, 5, 5);
         var enumerable2 = new FilteredContentEnumerable(refNodes, null, sort, 5, 10);
         // ASSERT
         var actualNames = enumerable1.Union(enumerable2).Select(x => x.Name).ToArray();
         AssertSequenceEqual(expectedNames, actualNames);
     });
 }
        public void FilteredEnumerable_NodeOrContent_AllCount()
        {
            ODataTest(() =>
            {
                var refNodes    = new NodeList <Node>(ContentType.GetContentTypes().Select(ct => ct.Id).ToArray());
                var refContents = refNodes.Select(Content.Create).ToArray();

                var enumerable1 = new FilteredContentEnumerable(refNodes, null, null, 5, 0);
                var enumerable2 = new FilteredContentEnumerable(refContents, null, null, 5, 0);
                var result1     = enumerable1.ToArray();
                var result2     = enumerable2.ToArray();

                var allCount1 = enumerable1.AllCount;
                var allCount2 = enumerable2.AllCount;
                Assert.AreEqual(refNodes.Count, refContents.Length);
                Assert.AreEqual(refNodes.Count, allCount1);
                Assert.AreEqual(allCount1, allCount2);
                Assert.AreEqual(5, result1.Length);
                Assert.AreEqual(5, result2.Length);
            });
        }
Пример #5
0
        private async Task WriteActionsAsync(ODataActionItem[] actionItems, HttpContext httpContext, ODataRequest req)
        {
            if (actionItems == null)
            {
                return;
            }

            var projector = Projector.Create(req, true);

            var enumerable = Content.CreateCollection(actionItems, ODataActionItem.Ctd);

            var filteredEnumerable = new FilteredContentEnumerable(enumerable,
                                                                   (LambdaExpression)req.Filter, req.Sort, req.Top, req.Skip);

            var contents = filteredEnumerable
                           .Select(x => CreateFieldDictionary(x, projector, httpContext))
                           .ToArray();

            var count = req.InlineCount == InlineCount.AllPages ? filteredEnumerable.AllCount : contents.Length;

            await WriteMultipleContentAsync(httpContext, contents, count).ConfigureAwait(false);
        }
        public void FilteredEnumerable_Filtered_CSrv()
        {
            ODataTest(() =>
            {
                // ARRANGE
                var allContentTypes = ContentType.GetContentTypes();
                var refNodes        = new NodeList <Node>(allContentTypes.Select(ct => ct.Id).ToArray());
                var sort            = new[] { new SortInfo("Name") };
                var filter          = new ODataParser().Parse("substringof('Folder', Name) eq true");;

                var expectedNames = allContentTypes
                                    .Where(x => x.Name.Contains("Folder"))
                                    .OrderBy(x => x.Name)
                                    .Select(x => x.Name).ToArray();

                // ACTION
                var enumerable = new FilteredContentEnumerable(refNodes, filter, sort, 0, 0);

                // ASSERT
                var actualNames = enumerable.Select(x => x.Name).ToArray();
                AssertSequenceEqual(expectedNames, actualNames);
            });
        }
Пример #7
0
        private async Task WriteMultiRefContentsAsync(object references, HttpContext httpContext, ODataRequest req)
        {
            if (references == null)
            {
                return;
            }

            var node      = references as Node;
            var projector = Projector.Create(req, true);

            if (node != null)
            {
                var contents = new List <ODataEntity>
                {
                    CreateFieldDictionary(Content.Create(node), projector, httpContext)
                };
                //TODO: ODATA: multiref item: get available types from reference property
                await WriteMultipleContentAsync(httpContext, contents, 1)
                .ConfigureAwait(false);
            }
            else
            {
                if (references is IEnumerable enumerable)
                {
                    var filteredEnumerable = new FilteredContentEnumerable(enumerable,
                                                                           (LambdaExpression)req.Filter, req.Sort, req.Top, req.Skip);

                    var contents = filteredEnumerable
                                   .Select(x => CreateFieldDictionary(x, projector, httpContext))
                                   .ToArray();

                    var count = req.InlineCount == InlineCount.AllPages ? filteredEnumerable.AllCount : contents.Length;

                    await WriteMultipleContentAsync(httpContext, contents, count).ConfigureAwait(false);
                }
            }
        }