diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index 6d2b85ff3a..29698cc9d4 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -11,6 +11,7 @@ using Examine.LuceneEngine; using Examine.LuceneEngine.Providers; using Lucene.Net.Analysis.Standard; using Lucene.Net.Store; +using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Configuration; @@ -412,6 +413,100 @@ namespace Umbraco.Tests.PublishedContent Assert.IsTrue(publishedSubChild1.AncestorsOrSelf().Select(x => x.Id).ContainsAll( new[] { mSubChild1.Id, mChild1.Id, mRoot.Id })); } + + [Test] + public void Convert_From_Legacy_Xml() + { + var config = SettingsForTests.GenerateMockSettings(); + + var contentMock = Mock.Get(config.Content); + contentMock.Setup(x => x.UseLegacyXmlSchema).Returns(true); + + SettingsForTests.ConfigureSettings(config); + + var nodeId = 2112; + + var xml = XElement.Parse(@" + + 115 + 268 + 10726 + jpg + + + 115 + 268 + 10726 + jpg + + "); + var node = xml.DescendantsAndSelf("node").Single(x => (int) x.Attribute("id") == nodeId); + + var publishedMedia = new PublishedMediaCache(); + + var nav = node.CreateNavigator(); + + var converted = publishedMedia.ConvertFromXPathNodeIterator(nav.Select("/node"), nodeId); + + Assert.AreEqual(nodeId, converted.Id); + Assert.AreEqual(3, converted.Level); + Assert.AreEqual(1, converted.SortOrder); + Assert.AreEqual("Sam's Umbraco Image", converted.Name); + Assert.AreEqual("-1,1111,2222,2112", converted.Path); + } + + [Test] + public void Convert_From_Standard_Xml() + { + var config = SettingsForTests.GenerateMockSettings(); + + var contentMock = Mock.Get(config.Content); + contentMock.Setup(x => x.UseLegacyXmlSchema).Returns(true); + + SettingsForTests.ConfigureSettings(config); + + var nodeId = 2112; + + var xml = XElement.Parse(@" + + 115 + 268 + 10726 + jpg + + + 115 + 268 + 10726 + jpg + + "); + var node = xml.DescendantsAndSelf("Image").Single(x => (int)x.Attribute("id") == nodeId); + + var publishedMedia = new PublishedMediaCache(); + + var nav = node.CreateNavigator(); + + var converted = publishedMedia.ConvertFromXPathNodeIterator(nav.Select("/Image"), nodeId); + + Assert.AreEqual(nodeId, converted.Id); + Assert.AreEqual(3, converted.Level); + Assert.AreEqual(1, converted.SortOrder); + Assert.AreEqual("Sam's Umbraco Image", converted.Name); + Assert.AreEqual("-1,1111,2222,2112", converted.Path); + } + + [Test] + public void Detects_Error_In_Xml() + { + var errorXml = new XElement("error", string.Format("No media is maching '{0}'", 1234)); + var nav = errorXml.CreateNavigator(); + + var publishedMedia = new PublishedMediaCache(); + var converted = publishedMedia.ConvertFromXPathNodeIterator(nav.Select("/"), 1234); + + Assert.IsNull(converted); + } } diff --git a/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs b/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs index db4b87ab11..bf5f0516bd 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs @@ -19,10 +19,7 @@ namespace Umbraco.Tests.TestHelpers [SetUp] public virtual void Initialize() { - using (DisposableTimer.TraceDuration("init")) - { - SettingsForTests.Reset(); - } + SettingsForTests.Reset(); } @@ -30,10 +27,7 @@ namespace Umbraco.Tests.TestHelpers public virtual void TearDown() { //reset settings - using (DisposableTimer.TraceDuration("teardown")) - { - SettingsForTests.Reset(); - } + SettingsForTests.Reset(); } } diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs index 91989b2496..f9c2d5a710 100644 --- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs +++ b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs @@ -197,32 +197,25 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache () => id); var media = global::umbraco.library.GetMedia(id, true); - if (media != null && media.Current != null) - { - media.MoveNext(); - var moved = media.Current.MoveToFirstChild(); - //first check if we have an error - if (moved) - { - if (media.Current.Name.InvariantEquals("error")) - { - return null; - } - } - if (moved) - { - //move back to the parent and return - media.Current.MoveToParent(); - } - return ConvertFromXPathNavigator(media.Current); - } + + return ConvertFromXPathNodeIterator(media, id); + } + + internal IPublishedContent ConvertFromXPathNodeIterator(XPathNodeIterator media, int id) + { + if (media != null && media.Current != null) + { + return media.Current.Name.InvariantEquals("error") + ? null + : ConvertFromXPathNavigator(media.Current); + } LogHelper.Debug( "Could not retrieve media {0} from Examine index or from legacy library.GetMedia method", () => id); - return null; - } + return null; + } internal IPublishedContent ConvertFromSearchResult(SearchResult searchResult) { diff --git a/src/Umbraco.Web/umbraco.presentation/library.cs b/src/Umbraco.Web/umbraco.presentation/library.cs index 0415bff9c8..d4042f75aa 100644 --- a/src/Umbraco.Web/umbraco.presentation/library.cs +++ b/src/Umbraco.Web/umbraco.presentation/library.cs @@ -518,9 +518,8 @@ namespace umbraco LogHelper.Debug("No media result for id {0}", () => MediaId); - var xd = new XmlDocument(); - xd.LoadXml(string.Format("No media is maching '{0}'", MediaId)); - return xd.CreateNavigator().Select("/"); + var errorXml = new XElement("error", string.Format("No media is maching '{0}'", MediaId)); + return errorXml.CreateNavigator().Select("/"); } private static XElement GetMediaDo(int mediaId, bool deep)