public void UseDefaultIncludes() { var root = new RootObject { Id = Guid.NewGuid(), StringValue = "Name", NonIncluded = "A description", ExcludedFromProjection = "Some Details", }; object result = _expander.Expand(root); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.StringValue.ShouldBe(root.StringValue); projection.Id.ShouldBe(root.Id); projection.NonIncluded.ShouldBe(root.NonIncluded); projection.Additional.ShouldBeNull(); projection.Child.ShouldBeNull(); projection.Children.ShouldBeNull(); projection.Upconvert.ShouldBeNull(); projection.ValueFromTranslator.ShouldBeNull(); projection.Downconvert.ShouldBeNull(); }
public void DifferingChildren() { var root = new RootObject { Child = new ChildObject { Id = Guid.NewGuid(), Name = "Child1", Description = "Child Description1" }, Child2 = new ChildObject { Id = Guid.NewGuid(), Name = "Child2", Description = "Child Description2" } }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.Child)}[{nameof(ChildObjectProjection.Name)}],{nameof(RootObjectProjection.Child2)}[{nameof(ChildObjectProjection.Id)},{nameof(ChildObjectProjection.Description)}]]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.Child.Name.ShouldBe(root.Child.Name); projection.Child.Description.ShouldBeNull(); projection.Child.Id.ShouldBe(Guid.Empty); projection.Child2.Name.ShouldBeNull(); projection.Child2.Description.ShouldBe(root.Child2.Description); projection.Child2.Id.ShouldBe(root.Child2.Id); }
public void UseDefaultIncludesOnChild() { var root = new RootObject { Children = new List <ChildObject> { new ChildObject { Name = "Item1", Description = "Description1" }, new ChildObject { Name = "Item2", Description = "Description2" } } }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.Children)}]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.Children.ShouldNotBeNull(); projection.Children.Count.ShouldBe(2); projection.Children.Any(c => c.Name == "Item1").ShouldBeTrue(); projection.Children.Any(c => c.Name == "Item2").ShouldBeTrue(); projection.Children.Any(c => c.Description == "Description1").ShouldBeTrue(); projection.Children.Any(c => c.Description == "Description2").ShouldBeTrue(); }
public void ListOfChildrenHashSet() { var root = new RootObject { ChildrenSet = new HashSet <ChildObject> { new ChildObject { Name = "Item1", Description = "Description1" }, new ChildObject { Name = "Item2", Description = "Description2" } } }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.ChildrenSet)}[{nameof(ChildObject.Name)}]]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.ChildrenSet.ShouldNotBeNull(); projection.ChildrenSet.Count().ShouldBe(2); projection.ChildrenSet.Any(c => c.Name == "Item1").ShouldBeTrue(); projection.ChildrenSet.Any(c => c.Name == "Item2").ShouldBeTrue(); projection.ChildrenSet.Any(c => c.Description != null).ShouldBeFalse(); }
public void ConvertToSubclass() { var root = new RootObject { SubclassInOriginal = new DerivedChildObject { Name = "Name", ExtendedProperty = "Extended" } }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.SubclassInOriginal)}[{nameof(DerivedChildObject.Name)},{nameof(DerivedChildObject.ExtendedProperty)}]]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.SubclassInOriginal.ShouldNotBeNull(); DerivedChildObjectProjection child = projection.SubclassInOriginal as DerivedChildObjectProjection; child.ShouldNotBeNull(); child.Name.ShouldBe(root.SubclassInOriginal.Name); child.ExtendedProperty.ShouldBe(root.SubclassInOriginal.ExtendedProperty); }
public void SimpleMapping() { var root = new RootObject { Id = Guid.NewGuid(), StringValue = "Name", NonIncluded = "A description", ExcludedFromProjection = "Some Details", }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.Id)},{nameof(RootObjectProjection.StringValue)}]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.StringValue.ShouldBe(root.StringValue); projection.Id.ShouldBe(root.Id); projection.NonIncluded.ShouldBeNull(); projection.Additional.ShouldBeNull(); projection.Child.ShouldBeNull(); projection.Children.ShouldBeNull(); projection.Upconvert.ShouldBeNull(); projection.ValueFromTranslator.ShouldBeNull(); projection.Downconvert.ShouldBeNull(); }
public void ListOfDifferingChildren() { var root = new RootObject { Children = new List <ChildObject> { new ChildObject { Name = "C1Item1", Description = "C1Description1" }, new ChildObject { Name = "C1Item2", Description = "C1Description2" } }, Children2 = new List <ChildObject> { new ChildObject { Name = "C2Item1", Description = "C2Description1" }, new ChildObject { Name = "C2Item2", Description = "C2Description2" } } }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.Children)}[{nameof(ChildObjectProjection.Name)}],{nameof(RootObjectProjection.Children2)}[{nameof(ChildObjectProjection.Description)}]]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.Children.ShouldNotBeNull(); projection.Children.Count.ShouldBe(2); projection.Children.Any(c => c.Name == "C1Item1").ShouldBeTrue(); projection.Children.Any(c => c.Name == "C1Item2").ShouldBeTrue(); projection.Children.Any(c => c.Description != null).ShouldBeFalse(); projection.Children.Any(c => c.Id != Guid.Empty).ShouldBeFalse(); projection.Children2.ShouldNotBeNull(); projection.Children2.Count.ShouldBe(2); projection.Children2.Any(c => c.Description == "C2Description1").ShouldBeTrue(); projection.Children2.Any(c => c.Description == "C2Description2").ShouldBeTrue(); projection.Children2.Any(c => c.Name != null).ShouldBeFalse(); projection.Children2.Any(c => c.Id != Guid.Empty).ShouldBeFalse(); }
public void SimpleFromTranslator() { var root = new RootObject { }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.ValueFromTranslator)}]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.ValueFromTranslator.ShouldBe(5.2); }
public void SimpleFromMethod() { var root = new RootObject { }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.FromMethod)}]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.FromMethod.ShouldBe(root.FromMethod()); }
public void DownconvertBasicType() { var root = new RootObject { Downconvert = 5.5 }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.Downconvert)}]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.Downconvert.ShouldBe(6); }
public void AssignNullToNullable() { var root = new RootObject { Nullable = null, }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.Nullable)}]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.Nullable.ShouldBe(null); }
public void ComplexFromTranslator() { var root = new RootObject { }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.ComplexFromTranslator)}]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.ComplexFromTranslator.Id.ShouldBe(new Guid()); projection.ComplexFromTranslator.Name.ShouldBe("Complex trans name"); projection.ComplexFromTranslator.Description.ShouldBe("Complex trans description"); }
public void ComplexFromMethod() { var root = new RootObject { }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.ComplexFromMethod)}[{nameof(ChildObjectProjection.Id)},{nameof(ChildObjectProjection.Name)}]]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.ComplexFromMethod.ShouldNotBeNull(); projection.ComplexFromMethod.Id.ShouldNotBe(Guid.Empty); String.IsNullOrWhiteSpace(projection.ComplexFromMethod.Name).ShouldBeFalse(); projection.ComplexFromMethod.Name.ShouldBe(root.ComplexFromMethod().Name); projection.ComplexFromMethod.Description.ShouldBeNull(); }
public void SpacesInIncludes() { var root = new RootObject { Id = Guid.NewGuid(), StringValue = "Name", NonIncluded = "A description", ExcludedFromProjection = "Some Details", }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[ {nameof(RootObjectProjection.Id)} , {nameof(RootObjectProjection.StringValue)} ]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.StringValue.ShouldBe(root.StringValue); projection.Id.ShouldBe(root.Id); }
public void EmptyIncludes() { var root = new RootObject { Id = Guid.NewGuid(), StringValue = "Name", Children = new List <ChildObject> { new ChildObject { Name = "Item1", Description = "Description1" }, new ChildObject { Name = "Item2", Description = "Description2" } } }; object result = _expander.Expand(root, null, PropertyReference.Parse("[]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.Children.ShouldBeNull(); projection.StringValue.ShouldBe(root.StringValue); projection.Id.ShouldBe(root.Id); projection.NonIncluded.ShouldBeNull(); projection.Additional.ShouldBeNull(); projection.Child.ShouldBeNull(); projection.Children.ShouldBeNull(); projection.Upconvert.ShouldBeNull(); projection.ValueFromTranslator.ShouldBeNull(); projection.Downconvert.ShouldBeNull(); }
public void ChildIncluded() { var root = new RootObject { Child = new ChildObject { Id = Guid.NewGuid(), Name = "Name", Description = "Description" } }; object result = _expander.Expand(root, null, PropertyReference.Parse($"[{nameof(RootObjectProjection.Child)}[{nameof(ChildObject.Id)},{nameof(ChildObject.Name)}]]")); result.ShouldNotBeNull(); RootObjectProjection projection = result as RootObjectProjection; projection.ShouldNotBeNull(); projection.Child.ShouldNotBeNull(); projection.Child.Id.ShouldBe(root.Child.Id); projection.Child.Name.ShouldBe(root.Child.Name); projection.Child.Description.ShouldBeNull(); }