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); } }
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); }
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); }
public void EfCoreSetup_Database_Mapper_NoData_PeopleExpandFavorite() { var mapper = GetMapper; var configProvider = mapper.ConfigurationProvider; var context = GetDataContext; context.Children.Add(new Child { Id = 10, Region_code = "en-US", Name = "best child ever" }); context.People.Add(new Person { Id = 1, Region_code = "en-US", Name = "parent", FavoriteId = 10 }); context.SaveChanges(); var nodata = new NoData.NoDataBuilder<DtoPerson>("Favorite"); var source = context.People.AsNoTracking(); var projected = nodata.Projection(source, configProvider).BuildQueryable(); var parent = projected.First(); Assert.NotNull(parent); Assert.NotNull(parent.Favorite); Assert.Equal(10, parent.Favorite.Id); }
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); } }
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); }
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); }
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()); } }
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()); } }
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."); }