Beispiel #1
0
        public void CanGetChangedPropertyNames()
        {
            dynamic delta  = new Delta <AddressEntity>();
            IDelta  idelta = delta as IDelta;

            // modify in the way we expect the formatter too.
            idelta.TrySetPropertyValue("City", "Sammamish");
            Assert.Single(idelta.GetChangedPropertyNames());
            Assert.Equal("City", idelta.GetChangedPropertyNames().Single());
            Assert.Equal(4, idelta.GetUnchangedPropertyNames().Count());

            // read the property back
            object city;

            Assert.True(idelta.TryGetPropertyValue("City", out city));
            Assert.Equal("Sammamish", city);

            // modify the way people will through custom code
            delta.StreetAddress = "23213 NE 15th Ct";
            string[] mods = idelta.GetChangedPropertyNames().ToArray();
            Assert.Equal(2, mods.Count());
            Assert.Contains("StreetAddress", mods);
            Assert.Contains("City", mods);
            Assert.Equal("23213 NE 15th Ct", delta.StreetAddress);
            Assert.Equal(3, idelta.GetUnchangedPropertyNames().Count());
        }
        public void CannotGetChangedNestedDeltaPropertyNames()
        {
            dynamic deltaCustomer  = new Delta <CustomerEntity>();
            IDelta  ideltaCustomer = deltaCustomer as IDelta;

            AddressEntity address = new AddressEntity();

            // modify
            address.City          = "Sammamish";
            address.StreetAddress = "23213 NE 15th Ct";

            // modify the nested property
            ideltaCustomer.TrySetPropertyValue("Address", address);
            Assert.Single(ideltaCustomer.GetChangedPropertyNames());
            Assert.Equal("Address", ideltaCustomer.GetChangedPropertyNames().Single());
            Assert.Equal(3, ideltaCustomer.GetUnchangedPropertyNames().Count());

            // read the not nested property back using legacy API
            Assert.True(ideltaCustomer.TryGetPropertyValue("Address", out dynamic deltaAddressEntity));
            Assert.IsAssignableFrom <AddressEntity>(deltaAddressEntity);
            AddressEntity addressEntity = deltaAddressEntity as AddressEntity;

            Assert.Equal("23213 NE 15th Ct", addressEntity.StreetAddress);
            Assert.Equal("Sammamish", addressEntity.City);

            // read the not nested property back using nested API
            Assert.False(deltaCustomer.TryGetNestedPropertyValue("Address", out dynamic deltaNestedAddress));
        }
        public void CanGetChangedNestedPropertyNames()
        {
            dynamic deltaCustomer  = new Delta <CustomerEntity>();
            IDelta  ideltaCustomer = deltaCustomer as IDelta;

            AddressEntity Address = new AddressEntity();

            Address.ID            = 42;
            Address.StreetAddress = "23213 NE 15th Ct";
            Address.City          = "Sammamish";
            Address.State         = "WA";
            Address.ZipCode       = 98074;

            // modify in the way we expect the formatter too.
            ideltaCustomer.TrySetPropertyValue("Address", Address);
            Assert.Single(ideltaCustomer.GetChangedPropertyNames());
            Assert.Equal("Address", ideltaCustomer.GetChangedPropertyNames().Single());
            Assert.Equal(3, ideltaCustomer.GetUnchangedPropertyNames().Count());

            // read the property back
            Assert.True(ideltaCustomer.TryGetPropertyValue("Address", out object address));
            Assert.Equal(Address, address);

            // read the instance
            CustomerEntity instance = deltaCustomer.GetInstance();

            Assert.Equal(Address, instance.Address);
        }
Beispiel #4
0
        private ODataResourceValue CreateODataResourceValue(object graph, IEdmStructuredTypeReference expectedType, ODataSerializerContext writeContext)
        {
            List <ODataProperty> properties    = new List <ODataProperty>();
            ODataResourceValue   resourceValue = new ODataResourceValue {
                TypeName = writeContext.GetEdmType(graph, graph.GetType()).FullName()
            };

            IDelta delta = graph as IDelta;

            if (delta != null)
            {
                foreach (string propertyName in delta.GetChangedPropertyNames())
                {
                    SetDeltaPropertyValue(writeContext, properties, delta, propertyName);
                }

                foreach (string propertyName in delta.GetUnchangedPropertyNames())
                {
                    SetDeltaPropertyValue(writeContext, properties, delta, propertyName);
                }
            }
            else
            {
                HashSet <string> structuralPropertyNames = new HashSet <string>();

                foreach (IEdmStructuralProperty structuralProperty in expectedType.DeclaredStructuralProperties())
                {
                    structuralPropertyNames.Add(structuralProperty.Name);
                }

                foreach (PropertyInfo property in graph.GetType().GetProperties())
                {
                    if (structuralPropertyNames.Contains(property.Name))
                    {
                        object propertyValue = property.GetValue(graph);
                        IEdmStructuredTypeReference expectedPropType = null;

                        if (propertyValue == null)
                        {
                            expectedPropType = writeContext.GetEdmType(propertyValue, property.PropertyType) as IEdmStructuredTypeReference;
                        }

                        SetPropertyValue(writeContext, properties, expectedPropType, property.Name, propertyValue);
                    }
                }
            }

            resourceValue.Properties = properties;

            return(resourceValue);
        }
        public void CannotSetNestedDeltaPropertyNameTwice()
        {
            dynamic deltaCustomer  = new Delta <CustomerEntity>();
            IDelta  ideltaCustomer = deltaCustomer as IDelta;

            dynamic deltaAddress  = new Delta <AddressEntity>();
            IDelta  ideltaAddress = deltaAddress as IDelta;

            // modify the nested property
            ideltaCustomer.TrySetPropertyValue("Address", ideltaAddress);
            Assert.Single(ideltaCustomer.GetChangedPropertyNames());
            Assert.Equal("Address", ideltaCustomer.GetChangedPropertyNames().Single());
            Assert.Equal(3, ideltaCustomer.GetUnchangedPropertyNames().Count());

            // modify again
            Assert.False(ideltaCustomer.TrySetPropertyValue("Address", ideltaAddress));
        }
        public void CanGetChangedNestedDeltaPropertyNames()
        {
            dynamic deltaCustomer  = new Delta <CustomerEntity>();
            IDelta  ideltaCustomer = deltaCustomer as IDelta;

            dynamic deltaAddress  = new Delta <AddressEntity>();
            IDelta  ideltaAddress = deltaAddress as IDelta;

            // modify
            ideltaAddress.TrySetPropertyValue("City", "Sammamish");
            ideltaAddress.TrySetPropertyValue("StreetAddress", "23213 NE 15th Ct");
            Assert.Equal(3, ideltaAddress.GetUnchangedPropertyNames().Count());
            string[] mods = ideltaAddress.GetChangedPropertyNames().ToArray();
            Assert.Equal(2, mods.Length);
            Assert.Contains("StreetAddress", mods);
            Assert.Contains("City", mods);
            Assert.Equal("23213 NE 15th Ct", deltaAddress.StreetAddress);
            Assert.Equal("Sammamish", deltaAddress.City);

            // read the property back
            Assert.True(ideltaAddress.TryGetPropertyValue("City", out var city));
            Assert.Equal("Sammamish", city);
            Assert.True(ideltaAddress.TryGetPropertyValue("StreetAddress", out var streetAddress));
            Assert.Equal("23213 NE 15th Ct", streetAddress);

            // modify the nested property
            ideltaCustomer.TrySetPropertyValue("Address", ideltaAddress);
            Assert.Single(ideltaCustomer.GetChangedPropertyNames());
            Assert.Equal("Address", ideltaCustomer.GetChangedPropertyNames().Single());
            Assert.Equal(3, ideltaCustomer.GetUnchangedPropertyNames().Count());

            // read the nested property back
            Assert.True(ideltaCustomer.TryGetPropertyValue("Address", out dynamic nestedAddress));
            Assert.IsAssignableFrom <Delta <AddressEntity> >(nestedAddress);
            Assert.Equal("Sammamish", nestedAddress.City);
            Assert.Equal("23213 NE 15th Ct", nestedAddress.StreetAddress);
        }
Beispiel #7
0
        public void CanGetChangedPropertyNamesButOnlyUpdatable()
        {
            dynamic delta  = new Delta <AddressEntity>();
            IDelta  idelta = delta as IDelta;

            // modify in the way we expect the formatter too.
            idelta.TrySetPropertyValue("City", "Sammamish");
            Assert.Single(idelta.GetChangedPropertyNames());
            Assert.Equal("City", idelta.GetChangedPropertyNames().Single());
            Assert.Equal(4, idelta.GetUnchangedPropertyNames().Count());

            // read the property back
            object city;

            Assert.True(idelta.TryGetPropertyValue("City", out city));
            Assert.Equal("Sammamish", city);

            // limit updatable properties
            delta.UpdatableProperties.Clear();
            delta.UpdatableProperties.Add("City");
            delta.UpdatableProperties.Add("StreetAddress");

            // modify the way people will through custom code
            delta.StreetAddress = "23213 NE 15th Ct";
            string[] mods = idelta.GetChangedPropertyNames().ToArray();
            Assert.Equal(2, mods.Count());
            Assert.Contains("StreetAddress", mods);
            Assert.Contains("City", mods);
            Assert.Equal("23213 NE 15th Ct", delta.StreetAddress);
            Assert.Empty(idelta.GetUnchangedPropertyNames());

            // try to modify an un-updatable property
            idelta.TrySetPropertyValue("State", "IA");
            mods = idelta.GetChangedPropertyNames().ToArray();
            Assert.Equal(2, mods.Count());
            Assert.Contains("StreetAddress", mods);
            Assert.Contains("City", mods);
            Assert.Null(delta.State);
            Assert.Empty(idelta.GetUnchangedPropertyNames());

            // limit a property that has been updated
            delta.UpdatableProperties.Remove("StreetAddress");
            mods = idelta.GetChangedPropertyNames().ToArray();
            Assert.Single(mods);
            Assert.Contains("City", mods);
            Assert.Null(delta.State);
            Assert.Empty(idelta.GetUnchangedPropertyNames());

            // enable a property that has not been updated
            delta.UpdatableProperties.Add("State");
            mods = idelta.GetChangedPropertyNames().ToArray();
            Assert.Single(mods);
            Assert.Contains("City", mods);
            Assert.Null(delta.State);
            Assert.Single(idelta.GetUnchangedPropertyNames());
            Assert.Equal("State", idelta.GetUnchangedPropertyNames().Single());

            // enable a property that doesn't exist
            delta.UpdatableProperties.Add("Bogus");
            mods = idelta.GetChangedPropertyNames().ToArray();
            Assert.Single(mods);
            Assert.Contains("City", mods);
            Assert.Null(delta.State);
            Assert.Single(idelta.GetUnchangedPropertyNames());
            Assert.Equal("State", idelta.GetUnchangedPropertyNames().Single());

            // set a property that doesn't exist
            Assert.False(delta.TrySetPropertyValue("Bogus", "Bad"));
            mods = idelta.GetChangedPropertyNames().ToArray();
            Assert.Single(mods);
            Assert.Contains("City", mods);
            Assert.Null(delta.State);
            Assert.Single(idelta.GetUnchangedPropertyNames());
            Assert.Equal("State", idelta.GetUnchangedPropertyNames().Single());
        }