UmbracoVault icon indicating copy to clipboard operation
UmbracoVault copied to clipboard

Normalize Behavior for Inheritence

Open kensykora opened this issue 8 years ago • 0 comments

Currently when an inheritance model is used, behavior within Vault is undefined. For example, for the Castle factory, this test currently passes

        public class InnerClassNoAttributeExtendsBaseClassAutoMap : BaseClassWithAutoMap
        {
            [UmbracoProperty]
            public string Introduction { get; set; }

            [UmbracoProperty]
            public string Body { get; set; }

            [UmbracoProperty]
            public string ImageUrl { get; set; }

            [UmbracoProperty]
            public virtual string ButtonText { get; set; }

            [UmbracoIgnoreProperty]
            public string Ignore1 { get; set; }

            public virtual string Ignore2 { get; set; }
        }

        [UmbracoEntity(AutoMap = true)]
        public class BaseClassWithAutoMap
        {
            public string BaseProperty { get; set; }

            [UmbracoIgnoreProperty]
            public string BaseIgnore { get; set; }

            public virtual string BaseVirtual { get; set; }
        }

        [TestMethod]
        public void GetPropertiesToFill_For_InnerClassNoAttributeExtendsBaseClassAutoMap_ShouldReturnCorrectProperties_WithoutAutomap()
        {
            var properties = _factory.GetPropertiesToFill<InnerClassNoAttributeExtendsBaseClassAutoMap>();
            Assert.AreEqual(4, properties.Count);
            Assert.IsNotNull(properties.FirstOrDefault(p => p.Name == "Introduction"));
            Assert.IsNotNull(properties.FirstOrDefault(p => p.Name == "Body"));
            Assert.IsNotNull(properties.FirstOrDefault(p => p.Name == "ImageUrl"));
            Assert.IsNotNull(properties.FirstOrDefault(p => p.Name == "BaseProperty"));
        }

and for the default factory, this currently is a passing test:

        public class InnerClassNoAttributeExtendsBaseClass : BaseClass
        {
            public string Introduction { get; set; }

            public string Body { get; set; }

            public string ImageUrl { get; set; }

            public virtual string ButtonText { get; set; }

            public string Ignore1 { get; set; }

            public virtual string Ignore2 { get; set; }
        }
   [UmbracoEntity] // AutoMap = False
        public class BaseClass
        {
            [UmbracoProperty]
            public string BaseProperty { get; set; }

            public string BaseIgnore { get; set; }

            [UmbracoProperty]
            public virtual string BaseVirtual { get; set; }
        }
        [TestMethod]
        public void GetPropertiesToFill_For_InnerClassNoAttributeExtendsBaseClass_ShouldReturnCorrectProperties_WithoutAutomap()
        {
            var properties = _factory.GetPropertiesToFill<InnerClassNoAttributeExtendsBaseClass>();
            Assert.AreEqual(2, properties.Count);
            Assert.IsNotNull(properties.FirstOrDefault(p => p.Name == "BaseProperty"));
            Assert.IsNotNull(properties.FirstOrDefault(p => p.Name == "BaseVirtual"));
        }

and on the proxy factory:

        // TODO: Change this behavior later on, probably shouldn't work like this, but retain for now
        // for backewards compatibility
        [TestMethod]
        public void GetPropertiesToFill_For_InnerClassNoAttributeExtendsBaseClass_ShouldReturnCorrectProperties_WithoutAutomap()
        {
            var properties = _factory.GetPropertiesToFill<InnerClassNoAttributeExtendsBaseClass>();
            Assert.AreEqual(1, properties.Count);
            Assert.IsNotNull(properties.FirstOrDefault(p => p.Name == "BaseProperty"));
        }

kensykora avatar Apr 01 '16 17:04 kensykora