UmbracoVault
UmbracoVault copied to clipboard
Normalize Behavior for Inheritence
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"));
}