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)