Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }
Example #5
0
        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);
        }
Example #6
0
        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();
        }
Example #7
0
        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();
        }
Example #8
0
        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);
        }
Example #9
0
        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());
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }
Example #12
0
        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");
        }
Example #13
0
        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();
        }
Example #14
0
        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);
        }
Example #15
0
        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();
        }
Example #16
0
        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();
        }