示例#1
0
        public void SelectExpand_Deserialized_SelectNameIdAndNameOfPartner_SelectInsideExpand_Success()
        {
            var filter     = new NoData.NoDataBuilder <Dto>("partner($select=Name,id)", null, "Name,id");
            var serialized = filter.Load(ParentCollection.AsQueryable()).AsJson();

            Assert.NotNull(serialized);
            Assert.Contains("[", serialized);
            Assert.Contains("]", serialized);

            Assert.Contains("Name", serialized);
            Assert.Contains("John", serialized);
            Assert.Contains("Jane", serialized);

            Assert.Contains("id", serialized);
            Assert.Contains("1", serialized);
            Assert.Contains("2", serialized);

            Assert.DoesNotContain("region_code", serialized);
            Assert.DoesNotContain("en", serialized);
            Assert.DoesNotContain("en", serialized);

            Assert.Contains("partner", serialized);
            Assert.DoesNotContain("children", serialized);
            Assert.DoesNotContain("favorite", serialized);
            Assert.DoesNotContain("null", serialized);
        }
示例#2
0
        public void Expand_WithExpandLimit_Unset_Success()
        {
            var queryable = new List <Dto>(ParentCollection).AsQueryable();
            var ft        = new NoData.NoDataBuilder <Dto>(new Parameters(nameof(Dto.partner)), new SettingsForType <Dto>());

            ft.Load(queryable);
        }
示例#3
0
        public void Expand_WithExpandLimit_0_Fails()
        {
            var queryable = new List <Dto>(ParentCollection).AsQueryable();
            var ft        = new NoData.NoDataBuilder <Dto>(new Parameters(nameof(Dto.partner)), new SettingsForType <Dto>()
            {
                MaxExpandDepth = 0
            });

            Assert.Throws <ArgumentException>(() =>
            {
                ft.Load(queryable);
            });
        }
示例#4
0
        public void Select_Deserialized_Null_PartnerIdExists_Success()
        {
            var filter = new NoData.NoDataBuilder <DtoWithNullPartnerId>(null, null, null);
            var input  = new[] { new DtoWithNullPartnerId {
                                     partnerId = 1
                                 } };
            var serialized = filter.Load(input.AsQueryable()).AsJson();

            Assert.NotNull(serialized);
            Assert.Contains("[", serialized);
            Assert.Contains("]", serialized);

            Assert.Contains("1", serialized);
        }
示例#5
0
        public void Filter_Expression(string expression, params int[] expectedIds)
        {
            var queryable = SampleCollection.ToList().AsQueryable();
            var ft        = new NoData.NoDataBuilder <Dto>("partner/partner", expression, null);
            var result    = ft.Load(queryable).BuildQueryable();

            var ids = result.SelectMany(r => r.GetAllIds()).ToList();

            Assert.Equal(expectedIds.Length, ids.Count);
            foreach (var resultId in ids)
            {
                Assert.Contains(resultId, expectedIds);
            }
        }
示例#6
0
        public void Expand_Expression(string expression, params int[] expectedIds)
        {
            var queryable = new List <Dto>(ParentCollection).AsQueryable();

            DefaultSettingsForType <Dto> .SettingsForType.MaxExpandDepth = 100;
            var ft     = new NoData.NoDataBuilder <Dto>(new Parameters(expression), DefaultSettingsForType <Dto> .SettingsForType);
            var result = ft.Load(queryable).BuildQueryable().ToList();

            var resultIds = result.SelectMany(x => x.GetAllIds()).OrderBy(x => x).ToList();
            var expected  = expectedIds.OrderBy(x => x).ToList();

            Assert.NotNull(result);

            resultIds.Should().BeEquivalentTo(expected, "Error with expression: " + expression);
        }
示例#7
0
        public void Expand_Ignore_Deserialized_Success()
        {
            var filter     = new NoData.NoDataBuilder <Dto>(null, null, null);
            var serialized = filter.Load(ParentCollection.AsQueryable()).AsJson();

            Assert.NotNull(serialized);
            Assert.Contains("[", serialized);  // returns list
            Assert.Contains("id", serialized); // basic properties
            Assert.Contains("Name", serialized);
            Assert.Contains("region_code", serialized);
            Assert.Contains("1", serialized);
            Assert.Contains("John", serialized);
            Assert.Contains("en", serialized);             // basic values
            Assert.DoesNotContain("children", serialized); // ignored values
            Assert.DoesNotContain("partner", serialized);
            Assert.DoesNotContain("favorite", serialized);
        }
示例#8
0
        public void Select_Name_OnlyReturnsName_Success()
        {
            var queryable = ParentCollection.ToList().AsQueryable();
            var ft        = new NoData.NoDataBuilder <Dto>(null, null, "Name");
            var result    = ft.Load(queryable).BuildQueryable();

            var resultIds = result.SelectMany(x => x.GetAllIds()).ToList();

            Assert.NotNull(result);
            Assert.Equal(ParentCollection.Count(), resultIds.Count);

            foreach (var dto in result)
            {
                Assert.NotNull(dto);
                Assert.Equal(0, dto.id); // int cannot be null, defaults to 0 when not selected.
                Assert.NotNull(dto.Name);
                Assert.Null(dto.region_code);
                Assert.Null(dto.favorite);
                Assert.Empty(dto.children);
            }
        }
示例#9
0
        public void SelectExpand_Deserialized_ExpandChildren_Success()
        {
            var filter     = new NoData.NoDataBuilder <Dto>("children", null, "id");
            var serialized = filter.Load(ParentCollection.AsQueryable()).AsJson();

            Assert.NotNull(serialized);
            Assert.Contains("[", serialized);
            Assert.Contains("]", serialized);

            Assert.Contains("Name", serialized);
            Assert.DoesNotContain(serialized, ("\"John\""));
            Assert.DoesNotContain(serialized, ("\"Jane\""));

            Assert.Contains("id", serialized);
            Assert.Contains("1", serialized);
            Assert.Contains("2", serialized);
            Assert.Contains("10", serialized);

            Assert.Contains("children", serialized);
            Assert.DoesNotContain("partner", serialized);
            Assert.DoesNotContain("favorite", serialized);
            Assert.DoesNotContain("null", serialized);
        }
示例#10
0
        public void Expand_Ignore_Deserialized_ExpandPartnerPartner_Success()
        {
            var filter     = new NoData.NoDataBuilder <Dto>("partner/partner", null, null);
            var serialized = filter.Load(ParentCollection.AsQueryable()).AsJson();

            Assert.NotNull(serialized);
            Assert.Contains("[", serialized);  // returns list
            Assert.Contains("id", serialized); // basic properties
            Assert.Contains("Name", serialized);
            Assert.Contains("region_code", serialized);
            Assert.Contains("1", serialized);
            Assert.Contains("2", serialized);
            // should appear three times. Once for the root. Once for the partner, once for the partners partner.
            Assert.Equal(3, serialized.Count(x => x == '1'));
            Assert.Equal(3, serialized.Count(x => x == '2'));
            Assert.Contains("John", serialized);
            Assert.Contains("Jane", serialized);
            Assert.Contains("partner", serialized);
            Assert.Contains("en", serialized);             // basic values
            Assert.DoesNotContain("children", serialized); // ignored values
            Assert.DoesNotContain("favorite", serialized);
            Assert.DoesNotContain("null", serialized);
        }
示例#11
0
        public void Select_Blank_AllPropertiesArePresent()
        {
            var queryable = ParentCollection.ToList().AsQueryable();
            var ft        = new NoData.NoDataBuilder <Dto>(null, null, null);
            var result    = ft.Load(queryable).BuildQueryable();

            var resultIds = result.SelectMany(x => x.GetAllIds()).ToList();

            Assert.NotNull(result);
            int[] expectedIds = new[] { 1, 2, 3, 4, 5, 6 };
            Assert.Equal(expectedIds.Length, resultIds.Count);
            foreach (var resultId in resultIds)
            {
                Assert.Contains(resultId, expectedIds);
            }

            foreach (var dto in result)
            {
                Assert.NotNull(dto);
                Assert.NotNull(dto.Name);
                Assert.NotNull(dto.region_code);
                Assert.Null(dto.favorite ?? dto.children?.FirstOrDefault());
            }
        }
示例#12
0
        public void Select_id_OnlyReturnsId_Success()
        {
            var queryable = ParentCollection.ToList().AsQueryable();
            var ft        = new NoData.NoDataBuilder <Dto>(null, null, "id");
            var result    = ft.Load(queryable).BuildQueryable();

            var resultIds = result.SelectMany(x => x.GetAllIds()).OrderBy(x => x).ToList();

            Assert.NotNull(result);
            var expectedIds = new[] { 1, 2, 3, 4, 5, 6 }.ToList();

            for (var i = 0; i < expectedIds.Count && i < resultIds.Count; ++i)
            {
                resultIds[i].Should().Be(expectedIds[i]);
            }

            foreach (var dto in result)
            {
                Assert.NotNull(dto);
                Assert.Null(dto.Name);
                Assert.Null(dto.region_code);
                Assert.Null(dto.favorite ?? dto.children?.FirstOrDefault());
            }
        }
示例#13
0
        public void FilterExpand_Deserialized_SelectNameIdAndNameOfPartner_SelectInsideExpand_Success()
        {
            var filter     = new NoData.NoDataBuilder <Dto>("partner($filter=Name eq 'Jane')", null, "Name");
            var serialized = filter.Load(ParentCollection.AsQueryable()).AsJson();

            Assert.NotNull(serialized);
            Assert.True(serialized.Contains("["), "is an array");
            Assert.True(serialized.Contains("]"), "is an array");

            Assert.Contains("Name", serialized);
            Assert.True(serialized.Contains("John"), "Name is selected and should appear.");
            Assert.True(serialized.Contains("Jane"), "Name is selected and should appear.");

            Assert.True(serialized.Contains("id"), "id ");
            Assert.False(serialized.Contains("1"), "Selected out the top level id property.");
            Assert.True(serialized.Contains("2"), "expanded on partners, Jane's id should be present.");

            Assert.True(serialized.Contains("region_code"), "Jane has a region_code.");

            Assert.True(serialized.Contains("partner"), "Expanded on partner");
            Assert.False(serialized.Contains("children"), "not expanded on children");
            Assert.False(serialized.Contains("favorite"), "not expanded on favorite");
            Assert.False(serialized.Contains("null"), "Correlates to navigation properties that are serialized, but have a null value when they should not be serialized.");
        }