Serializes key for templates in package definition and imports if ava… (#11163)

This commit is contained in:
Andy Butland
2021-09-22 18:21:53 +02:00
committed by GitHub
parent e5ce9deeb6
commit fee3d0778a
4 changed files with 38 additions and 3 deletions

View File

@@ -1558,7 +1558,15 @@ namespace Umbraco.Cms.Infrastructure.Packaging
var masterElement = templateElement.Element("Master");
var existingTemplate = _fileService.GetTemplate(alias) as Template;
var template = existingTemplate ?? new Template(_shortStringHelper, templateName, alias);
// For new templates, use the serialized key if avaialble.
if (existingTemplate == null && Guid.TryParse(templateElement.Element("Key")?.Value, out var key))
{
template.Key = key;
}
template.Content = design;
if (masterElement != null && string.IsNullOrEmpty((string)masterElement) == false)

View File

@@ -1,11 +1,9 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Xml.Linq;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.Serialization;
@@ -319,6 +317,7 @@ namespace Umbraco.Cms.Core.Services.Implement
{
var xml = new XElement("Template");
xml.Add(new XElement("Name", template.Name));
xml.Add(new XElement("Key", template.Key));
xml.Add(new XElement("Alias", template.Alias));
xml.Add(new XElement("Design", new XCData(template.Content)));

View File

@@ -327,7 +327,7 @@ namespace Umbraco.Cms.Tests.Integration.Umbraco.Core.Packaging
Assert.Multiple(() =>
{
Assert.AreEqual("umbPackage", xml.Root.Name.ToString());
Assert.AreEqual($"<Templates><Template><Name>Text page</Name><Alias>textPage</Alias><Design><![CDATA[@using Umbraco.Cms.Web.Common.PublishedModels;{Environment.NewLine}@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage{Environment.NewLine}@{{{Environment.NewLine}\tLayout = null;{Environment.NewLine}}}]]></Design></Template></Templates>", xml.Element("umbPackage").Element("Templates").ToString(SaveOptions.DisableFormatting));
Assert.AreEqual($"<Templates><Template><Name>Text page</Name><Key>{template.Key}</Key><Alias>textPage</Alias><Design><![CDATA[@using Umbraco.Cms.Web.Common.PublishedModels;{Environment.NewLine}@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage{Environment.NewLine}@{{{Environment.NewLine}\tLayout = null;{Environment.NewLine}}}]]></Design></Template></Templates>", xml.Element("umbPackage").Element("Templates").ToString(SaveOptions.DisableFormatting));
Assert.IsNull(xml.DocumentType);
Assert.IsNull(xml.Parent);
Assert.IsNull(xml.NextNode);

View File

@@ -233,6 +233,34 @@ namespace Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Packaging
Assert.That(templates, Is.Not.Null);
Assert.That(templates.Any(), Is.True);
Assert.That(templates.Count(), Is.EqualTo(1));
var template = templates.First();
Assert.AreEqual(template.Name, "Articles");
}
[Test]
public void Can_Import_Single_Template_With_Key()
{
// Arrange
string strXml = ImportResources.StandardMvc_Package;
var xml = XElement.Parse(strXml);
XElement element = xml.Descendants("Templates").First();
var firstTemplateElement = element.Elements("Template").First();
var key = Guid.NewGuid();
firstTemplateElement.Add(new XElement("Key", key));
// Act
IEnumerable<ITemplate> templates = PackageDataInstallation.ImportTemplate(firstTemplateElement, 0);
// Assert
Assert.That(templates, Is.Not.Null);
Assert.That(templates.Any(), Is.True);
Assert.That(templates.Count(), Is.EqualTo(1));
var template = templates.First();
Assert.AreEqual(template.Name, "Articles");
Assert.AreEqual(template.Key, key);
}
[Test]