Fixes Template.ToXml() (U4-3508) and refactored Template.Import to use PackagingService.ImportTemplates.

Fixed nullreference bug in ImportTemplates when used with XElement("Template"). (Added test for case with one template only)
This commit is contained in:
lars-erik
2013-11-13 11:55:57 +01:00
parent e9ed1bf17a
commit d8debf6789
3 changed files with 23 additions and 17 deletions

View File

@@ -950,7 +950,7 @@ namespace Umbraco.Core.Services
var templates = new List<ITemplate>();
var templateElements = name.Equals("Templates")
? (from doc in element.Elements("Template") select doc).ToList()
: new List<XElement> { element.Element("Template") };
: new List<XElement> { element };
var fields = new List<TopologicalSorter.DependencyField<XElement>>();
foreach (XElement tempElement in templateElements)

View File

@@ -129,6 +129,24 @@ namespace Umbraco.Tests.Services.Importing
Assert.That(templates.Count(), Is.EqualTo(numberOfTemplates));
}
[Test]
public void PackagingService_Can_Import_Single_Template()
{
// Arrange
string strXml = ImportResources.StandardMvc_Package;
var xml = XElement.Parse(strXml);
var element = xml.Descendants("Templates").First().Element("Template");
var packagingService = ServiceContext.PackagingService;
// Act
var templates = packagingService.ImportTemplates(element);
// Assert
Assert.That(templates, Is.Not.Null);
Assert.That(templates.Any(), Is.True);
Assert.That(templates.Count(), Is.EqualTo(1));
}
[Test]
public void PackagingService_Can_Import_StandardMvc_ContentTypes_Package_Xml()
{

View File

@@ -288,7 +288,7 @@ namespace umbraco.cms.businesslogic.template
public XmlNode ToXml(XmlDocument doc)
{
XmlNode template = doc.CreateElement("Template");
template.AppendChild(xmlHelper.addTextNode(doc, "Name", this.Text));
template.AppendChild(xmlHelper.addTextNode(doc, "Name", base.Text));
template.AppendChild(xmlHelper.addTextNode(doc, "Alias", this.Alias));
if (this.MasterTemplate != 0)
@@ -769,21 +769,9 @@ namespace umbraco.cms.businesslogic.template
public static Template Import(XmlNode n, User u)
{
string alias = xmlHelper.GetNodeValue(n.SelectSingleNode("Alias"));
Template t = Template.GetByAlias(alias);
var design = xmlHelper.GetNodeValue(n.SelectSingleNode("Design"));
if (t == null)
{
//create the template with the design if one is specified
t = MakeNew(xmlHelper.GetNodeValue(n.SelectSingleNode("Name")), u,
design.IsNullOrWhiteSpace() ? null : design);
}
t.Alias = alias;
return t;
var element = System.Xml.Linq.XElement.Parse(n.OuterXml);
var templates = ApplicationContext.Current.Services.PackagingService.ImportTemplates(element, u.Id);
return new Template(templates.First().Id);
}