diff --git a/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj b/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
index 233da0d14b..48d69cf757 100644
--- a/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
+++ b/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
@@ -61,7 +61,6 @@
-
diff --git a/src/Umbraco.Tests.Benchmarks/XmlPublishedContentInitBenchmarks.cs b/src/Umbraco.Tests.Benchmarks/XmlPublishedContentInitBenchmarks.cs
deleted file mode 100644
index bc18b97d47..0000000000
--- a/src/Umbraco.Tests.Benchmarks/XmlPublishedContentInitBenchmarks.cs
+++ /dev/null
@@ -1,311 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Xml;
-using BenchmarkDotNet.Attributes;
-using Moq;
-using Umbraco.Core;
-using Umbraco.Core.Logging;
-using Umbraco.Core.Models;
-using Umbraco.Core.Models.PublishedContent;
-using Umbraco.Core.PropertyEditors;
-using Umbraco.Core.Services;
-using Umbraco.Tests.Benchmarks.Config;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
-
-namespace Umbraco.Tests.Benchmarks
-{
- [QuickRunWithMemoryDiagnoserConfig]
- public class XmlPublishedContentInitBenchmarks
- {
- public XmlPublishedContentInitBenchmarks()
- {
- _xml10 = Build(10);
- _xml100 = Build(100);
- _xml1000 = Build(1000);
- _xml10000 = Build(10000);
- }
-
- private readonly string[] _intAttributes = { "id", "parentID", "nodeType", "level", "writerID", "creatorID", "template", "sortOrder", "isDoc", "isDraft" };
- private readonly string[] _strAttributes = { "nodeName", "urlName", "writerName", "creatorName", "path" };
- private readonly string[] _dateAttributes = { "createDate", "updateDate" };
- private readonly string[] _guidAttributes = { "key", "version" };
-
- private XmlDocument Build(int children)
- {
- var xml = new XmlDocument();
- var root = Build(xml, "Home", 10);
- for (int i = 0; i < children; i++)
- {
- var child = Build(xml, "child" + i, 10);
- root.AppendChild(child);
- }
- xml.AppendChild(root);
- return xml;
- }
-
- private XmlElement Build(XmlDocument xml, string name, int propertyCount)
- {
- var random = new Random();
- var content = xml.CreateElement(name);
- foreach (var p in _intAttributes)
- {
- var a = xml.CreateAttribute(p);
- a.Value = random.Next(1, 9).ToInvariantString();
- content.Attributes.Append(a);
- }
- foreach (var p in _strAttributes)
- {
- var a = xml.CreateAttribute(p);
- a.Value = Guid.NewGuid().ToString();
- content.Attributes.Append(a);
- }
- foreach (var p in _guidAttributes)
- {
- var a = xml.CreateAttribute(p);
- a.Value = Guid.NewGuid().ToString();
- content.Attributes.Append(a);
- }
- foreach (var p in _dateAttributes)
- {
- var a = xml.CreateAttribute(p);
- a.Value = DateTime.Now.ToString("o");
- content.Attributes.Append(a);
- }
-
- for (int i = 0; i < propertyCount; i++)
- {
- var prop = xml.CreateElement("prop" + i);
- var cdata = xml.CreateCDataSection(string.Join("", Enumerable.Range(0, 10).Select(x => Guid.NewGuid().ToString())));
- prop.AppendChild(cdata);
- content.AppendChild(prop);
- }
-
- return content;
- }
-
- private readonly XmlDocument _xml10;
- private readonly XmlDocument _xml100;
- private readonly XmlDocument _xml1000;
- private readonly XmlDocument _xml10000;
-
- //out props
- int id, nodeType, level, writerId, creatorId, template, sortOrder;
- Guid key, version;
- string name, urlName, writerName, creatorName, docTypeAlias, path;
- bool isDraft;
- bool isPublished;
- DateTime createDate, updateDate;
- PublishedContentType publishedContentType;
- Dictionary properties;
-
- [Benchmark(Baseline = true, OperationsPerInvoke = 10)]
- public void Original_10_Children()
- {
- OriginalInitializeNode(_xml10.DocumentElement, false, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out version, out createDate, out updateDate, out level, out isDraft, out isPublished, out publishedContentType,
- out properties);
- }
-
- [Benchmark(OperationsPerInvoke = 10)]
- public void Original_100_Children()
- {
- OriginalInitializeNode(_xml100.DocumentElement, false, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out version, out createDate, out updateDate, out level, out isDraft, out isPublished, out publishedContentType,
- out properties);
- }
-
- [Benchmark(OperationsPerInvoke = 10)]
- public void Original_1000_Children()
- {
- OriginalInitializeNode(_xml1000.DocumentElement, false, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out version, out createDate, out updateDate, out level, out isDraft, out isPublished, out publishedContentType,
- out properties);
- }
-
- [Benchmark(OperationsPerInvoke = 10)]
- public void Original_10000_Children()
- {
- OriginalInitializeNode(_xml10000.DocumentElement, false, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out version, out createDate, out updateDate, out level, out isDraft, out isPublished, out publishedContentType,
- out properties);
- }
-
- [Benchmark(OperationsPerInvoke = 10)]
- public void Enhanced_10_Children()
- {
- XmlPublishedContent.InitializeNode(null, _xml10.DocumentElement, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out createDate, out updateDate, out level, out isDraft, out publishedContentType,
- out properties, GetPublishedContentType);
- }
-
- [Benchmark(OperationsPerInvoke = 10)]
- public void Enhanced_100_Children()
- {
- XmlPublishedContent.InitializeNode(null, _xml100.DocumentElement, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out createDate, out updateDate, out level, out isDraft, out publishedContentType,
- out properties, GetPublishedContentType);
- }
-
- [Benchmark(OperationsPerInvoke = 10)]
- public void Enhanced_1000_Children()
- {
- XmlPublishedContent.InitializeNode(null, _xml1000.DocumentElement, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out createDate, out updateDate, out level, out isDraft,out publishedContentType,
- out properties, GetPublishedContentType);
- }
-
- [Benchmark(OperationsPerInvoke = 10)]
- public void Enhanced_10000_Children()
- {
- XmlPublishedContent.InitializeNode(null, _xml10000.DocumentElement, false,
- out id, out key, out template, out sortOrder, out name, out writerName, out urlName,
- out creatorName, out creatorId, out writerId, out docTypeAlias, out nodeType, out path,
- out createDate, out updateDate, out level, out isDraft,out publishedContentType,
- out properties, GetPublishedContentType);
- }
-
-
- internal static void OriginalInitializeNode(XmlNode xmlNode, bool legacy, bool isPreviewing,
- out int id, out Guid key, out int template, out int sortOrder, out string name, out string writerName, out string urlName,
- out string creatorName, out int creatorId, out int writerId, out string docTypeAlias, out int docTypeId, out string path,
- out Guid version, out DateTime createDate, out DateTime updateDate, out int level, out bool isDraft, out bool isPublished,
- out PublishedContentType contentType, out Dictionary properties)
- {
- //initialize the out params with defaults:
- writerName = null;
- docTypeAlias = null;
- id = template = sortOrder = template = creatorId = writerId = docTypeId = level = default(int);
- key = version = default(Guid);
- name = writerName = urlName = creatorName = docTypeAlias = path = null;
- createDate = updateDate = default(DateTime);
- isDraft = false;
- isPublished = true;
- contentType = null;
- properties = null;
-
- //return if this is null
- if (xmlNode == null)
- {
- return;
- }
-
- if (xmlNode.Attributes != null)
- {
- id = int.Parse(xmlNode.Attributes.GetNamedItem("id").Value);
- if (xmlNode.Attributes.GetNamedItem("key") != null) // because, migration
- key = Guid.Parse(xmlNode.Attributes.GetNamedItem("key").Value);
- if (xmlNode.Attributes.GetNamedItem("template") != null)
- template = int.Parse(xmlNode.Attributes.GetNamedItem("template").Value);
- if (xmlNode.Attributes.GetNamedItem("sortOrder") != null)
- sortOrder = int.Parse(xmlNode.Attributes.GetNamedItem("sortOrder").Value);
- if (xmlNode.Attributes.GetNamedItem("nodeName") != null)
- name = xmlNode.Attributes.GetNamedItem("nodeName").Value;
- if (xmlNode.Attributes.GetNamedItem("writerName") != null)
- writerName = xmlNode.Attributes.GetNamedItem("writerName").Value;
- if (xmlNode.Attributes.GetNamedItem("urlName") != null)
- urlName = xmlNode.Attributes.GetNamedItem("urlName").Value;
- // Creatorname is new in 2.1, so published xml might not have it!
- try
- {
- creatorName = xmlNode.Attributes.GetNamedItem("creatorName").Value;
- }
- catch
- {
- creatorName = writerName;
- }
-
- //Added the actual userID, as a user cannot be looked up via full name only...
- if (xmlNode.Attributes.GetNamedItem("creatorID") != null)
- creatorId = int.Parse(xmlNode.Attributes.GetNamedItem("creatorID").Value);
- if (xmlNode.Attributes.GetNamedItem("writerID") != null)
- writerId = int.Parse(xmlNode.Attributes.GetNamedItem("writerID").Value);
-
- if (legacy)
- {
- if (xmlNode.Attributes.GetNamedItem("nodeTypeAlias") != null)
- docTypeAlias = xmlNode.Attributes.GetNamedItem("nodeTypeAlias").Value;
- }
- else
- {
- docTypeAlias = xmlNode.Name;
- }
-
- if (xmlNode.Attributes.GetNamedItem("nodeType") != null)
- docTypeId = int.Parse(xmlNode.Attributes.GetNamedItem("nodeType").Value);
- if (xmlNode.Attributes.GetNamedItem("path") != null)
- path = xmlNode.Attributes.GetNamedItem("path").Value;
- if (xmlNode.Attributes.GetNamedItem("version") != null)
- version = new Guid(xmlNode.Attributes.GetNamedItem("version").Value);
- if (xmlNode.Attributes.GetNamedItem("createDate") != null)
- createDate = DateTime.Parse(xmlNode.Attributes.GetNamedItem("createDate").Value);
- if (xmlNode.Attributes.GetNamedItem("updateDate") != null)
- updateDate = DateTime.Parse(xmlNode.Attributes.GetNamedItem("updateDate").Value);
- if (xmlNode.Attributes.GetNamedItem("level") != null)
- level = int.Parse(xmlNode.Attributes.GetNamedItem("level").Value);
-
- isDraft = (xmlNode.Attributes.GetNamedItem("isDraft") != null);
- }
-
- // load data
-
- var dataXPath = legacy ? "data" : "* [not(@isDoc)]";
- var nodes = xmlNode.SelectNodes(dataXPath);
-
- contentType = GetPublishedContentType(PublishedItemType.Content, docTypeAlias);
-
- var propertyNodes = new Dictionary();
- if (nodes != null)
- foreach (XmlNode n in nodes)
- {
- var attrs = n.Attributes;
- if (attrs == null) continue;
- var alias = legacy
- ? attrs.GetNamedItem("alias").Value
- : n.Name;
- propertyNodes[alias.ToLowerInvariant()] = n;
- }
- properties = contentType.PropertyTypes.Select(p =>
- {
- XmlNode n;
- return propertyNodes.TryGetValue(p.Alias.ToLowerInvariant(), out n)
- ? new XmlPublishedProperty(p, null, isPreviewing, n)
- : new XmlPublishedProperty(p, null, isPreviewing);
- }).Cast().ToDictionary(
- x => x.Alias,
- x => x,
- StringComparer.OrdinalIgnoreCase);
- }
-
- private static PublishedContentType GetPublishedContentType(PublishedItemType type, string alias)
- {
- var dataType = new DataType(new VoidEditor(Mock.Of())) { Id = 1 };
-
- var dataTypeService = Mock.Of();
- Mock.Get(dataTypeService)
- .Setup(x => x.GetDataType(It.IsAny()))
- .Returns(id => id == 1 ? dataType : null);
- Mock.Get(dataTypeService)
- .Setup(x => x.GetAll())
- .Returns(new[] { dataType });
-
- var factory = new PublishedContentTypeFactory(Mock.Of(), new PropertyValueConverterCollection(Array.Empty()), dataTypeService);
- return factory.CreateContentType(0, alias, new string[] {},
- new List(Enumerable.Range(0, 10).Select(x => factory.CreatePropertyType("prop" + x, 1))));
- }
- }
-}
diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs
index e868e32b07..87ec4215ac 100644
--- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs
+++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs
@@ -7,12 +7,12 @@ using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Services;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
using Umbraco.Web.PublishedCache;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using Umbraco.Web.Routing;
using Umbraco.Web.Security;
@@ -66,7 +66,7 @@ namespace Umbraco.Tests.Cache.PublishedCache
var xmlStore = new XmlStore(() => _xml, null, null, null);
var appCache = new DictionaryAppCache();
var domainCache = new DomainCache(ServiceContext.DomainService, DefaultCultureAccessor);
- var publishedShapshot = new Umbraco.Web.PublishedCache.XmlPublishedCache.PublishedSnapshot(
+ var publishedShapshot = new PublishedSnapshot(
new PublishedContentCache(xmlStore, domainCache, appCache, globalSettings, new SiteDomainHelper(), umbracoContextAccessor, ContentTypesCache, null, null),
new PublishedMediaCache(xmlStore, ServiceContext.MediaService, ServiceContext.UserService, appCache, ContentTypesCache, Factory.GetInstance(), umbracoContextAccessor),
new PublishedMemberCache(null, appCache, Current.Services.MemberService, ContentTypesCache, umbracoContextAccessor),
diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
index 07a6a6ee82..08eeb8ef4d 100644
--- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
+++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
@@ -10,12 +10,12 @@ using Umbraco.Core.Composing;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Strings;
using Umbraco.Tests.TestHelpers;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using Umbraco.Tests.Testing;
using Current = Umbraco.Web.Composing.Current;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Services;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.PublishedContent;
using Umbraco.Web;
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/DictionaryPublishedContent.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs
similarity index 99%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/DictionaryPublishedContent.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs
index 74043a9519..d3cbf1f183 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/DictionaryPublishedContent.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs
@@ -8,10 +8,12 @@ using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Web;
using Umbraco.Web.Composing;
using Umbraco.Web.Models;
+using Umbraco.Web.PublishedCache;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
/// An IPublishedContent that is represented all by a dictionary.
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/DomainCache.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/DomainCache.cs
similarity index 94%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/DomainCache.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/DomainCache.cs
index 4571e9d42b..cde2077551 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/DomainCache.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/DomainCache.cs
@@ -1,11 +1,12 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
-using Umbraco.Web.Routing;
using Umbraco.Core;
using Umbraco.Core.Services;
+using Umbraco.Web.PublishedCache;
+using Umbraco.Web.Routing;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
internal class DomainCache : IDomainCache
{
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PreviewContent.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/PreviewContent.cs
similarity index 99%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/PreviewContent.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/PreviewContent.cs
index 515fb96679..84b6f2b91c 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PreviewContent.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/PreviewContent.cs
@@ -7,7 +7,7 @@ using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Web.Composing;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
class PreviewContent
{
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedContentCache.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedContentCache.cs
similarity index 99%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedContentCache.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedContentCache.cs
index 6fd9f1da2b..51c6668913 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedContentCache.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedContentCache.cs
@@ -1,17 +1,19 @@
using System;
using System.Collections.Generic;
using System.Globalization;
+using System.Linq;
using System.Xml;
using System.Xml.XPath;
-using Umbraco.Core.Configuration;
using Umbraco.Core;
+using Umbraco.Core.Cache;
+using Umbraco.Core.Configuration;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Xml;
+using Umbraco.Web;
+using Umbraco.Web.PublishedCache;
using Umbraco.Web.Routing;
-using System.Linq;
-using Umbraco.Core.Cache;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
internal class PublishedContentCache : PublishedCacheBase, IPublishedContentCache
{
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMediaCache.cs
similarity index 99%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMediaCache.cs
index 7f9a21d24b..8cfc06c501 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMediaCache.cs
@@ -6,21 +6,21 @@ using System.Linq;
using System.Threading;
using System.Xml.XPath;
using Examine;
-using Examine.Providers;
using Examine.Search;
using Lucene.Net.Store;
using Umbraco.Core;
+using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Core.Services;
using Umbraco.Core.Xml;
using Umbraco.Examine;
-using Umbraco.Core.Cache;
-using Umbraco.Core.Services;
-using Umbraco.Core.Services.Implement;
+using Umbraco.Web;
using Umbraco.Web.Composing;
+using Umbraco.Web.PublishedCache;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
/// An IPublishedMediaStore that first checks for the media in Examine, and then reverts to the database
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMemberCache.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMemberCache.cs
similarity index 98%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMemberCache.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMemberCache.cs
index db6d85fb2d..c882488f20 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMemberCache.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMemberCache.cs
@@ -6,9 +6,11 @@ using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Security;
using Umbraco.Core.Services;
+using Umbraco.Web;
+using Umbraco.Web.PublishedCache;
using Umbraco.Web.Security;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
class PublishedMemberCache : IPublishedMemberCache
{
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedSnapshot.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedSnapshot.cs
similarity index 95%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedSnapshot.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedSnapshot.cs
index b9243309a2..bfef187371 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedSnapshot.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedSnapshot.cs
@@ -1,8 +1,9 @@
using System;
using Umbraco.Core;
using Umbraco.Core.Cache;
+using Umbraco.Web.PublishedCache;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
/// Implements a published snapshot.
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedSnapshotService.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedSnapshotService.cs
similarity index 99%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedSnapshotService.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedSnapshotService.cs
index d96bfd8a0a..4a201ae44c 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedSnapshotService.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedSnapshotService.cs
@@ -11,11 +11,12 @@ using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Scoping;
using Umbraco.Core.Services;
-using Umbraco.Core.Strings;
+using Umbraco.Web;
using Umbraco.Web.Cache;
+using Umbraco.Web.PublishedCache;
using Umbraco.Web.Routing;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
/// Implements a published snapshot service.
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/RoutesCache.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/RoutesCache.cs
similarity index 95%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/RoutesCache.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/RoutesCache.cs
index fb227fe65f..71f2f421ff 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/RoutesCache.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/RoutesCache.cs
@@ -1,10 +1,7 @@
-using System;
-using System.Collections.Concurrent;
+using System.Collections.Concurrent;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
// Note: RoutesCache closely follows the caching strategy dating from v4, which
// is obviously broken in many ways (eg it's a global cache but relying to some
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/SafeXmlReaderWriter.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/SafeXmlReaderWriter.cs
similarity index 98%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/SafeXmlReaderWriter.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/SafeXmlReaderWriter.cs
index 37a6b666d4..c0b9383b57 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/SafeXmlReaderWriter.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/SafeXmlReaderWriter.cs
@@ -3,7 +3,7 @@ using System.Xml;
using Umbraco.Core;
using Umbraco.Core.Scoping;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
// TODO: should be a ScopeContextualBase
internal class SafeXmlReaderWriter : IDisposable
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/UmbracoContextCache.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/UmbracoContextCache.cs
similarity index 81%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/UmbracoContextCache.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/UmbracoContextCache.cs
index 6b82a7ee3d..fc6dbe3f30 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/UmbracoContextCache.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/UmbracoContextCache.cs
@@ -1,11 +1,8 @@
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using System.Collections.Concurrent;
using System.Runtime.CompilerServices;
+using Umbraco.Web;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
static class UmbracoContextCache
{
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlPublishedContent.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs
similarity index 99%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlPublishedContent.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs
index 9a4c1f239c..e1819bf0be 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlPublishedContent.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs
@@ -7,10 +7,12 @@ using System.Xml.XPath;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Web;
using Umbraco.Web.Composing;
using Umbraco.Web.Models;
+using Umbraco.Web.PublishedCache;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlPublishedProperty.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedProperty.cs
similarity index 98%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlPublishedProperty.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedProperty.cs
index 805f7d9325..0c90c8d1ff 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlPublishedProperty.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedProperty.cs
@@ -5,7 +5,7 @@ using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Xml;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlStore.cs
similarity index 99%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/XmlStore.cs
index 36a8334782..3fb3d40e5b 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlStore.cs
@@ -12,7 +12,6 @@ using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Persistence;
-using Umbraco.Core.Persistence.DatabaseModelDefinitions;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Persistence.Repositories.Implement;
@@ -20,15 +19,15 @@ using Umbraco.Core.Scoping;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Changes;
using Umbraco.Core.Services.Implement;
-using Umbraco.Core.Strings;
using Umbraco.Core.Xml;
using Umbraco.Web.Cache;
using Umbraco.Web.Composing;
+using Umbraco.Web.PublishedCache;
using Umbraco.Web.Scheduling;
using File = System.IO.File;
using Task = System.Threading.Tasks.Task;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
/// Represents the Xml storage for the Xml published cache.
diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStoreFilePersister.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlStoreFilePersister.cs
similarity index 98%
rename from src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStoreFilePersister.cs
rename to src/Umbraco.Tests/LegacyXmlPublishedCache/XmlStoreFilePersister.cs
index 83d25d3e49..145a19872a 100644
--- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStoreFilePersister.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlStoreFilePersister.cs
@@ -1,11 +1,10 @@
using System;
using System.Threading;
-using System.Threading.Tasks;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Web.Scheduling;
-namespace Umbraco.Web.PublishedCache.XmlPublishedCache
+namespace Umbraco.Tests.LegacyXmlPublishedCache
{
///
/// This is the background task runner that persists the xml file to the file system
diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs
index bc1d8c2b70..a9022554c9 100644
--- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs
+++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs
@@ -8,7 +8,6 @@ using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.UmbracoExamine;
using Umbraco.Web;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using System.Linq;
using System.Threading;
using System.Xml;
@@ -23,6 +22,7 @@ using Umbraco.Core.Composing;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Services;
+using Umbraco.Tests.LegacyXmlPublishedCache;
namespace Umbraco.Tests.PublishedContent
{
diff --git a/src/Umbraco.Tests/Routing/RoutesCacheTests.cs b/src/Umbraco.Tests/Routing/RoutesCacheTests.cs
index 76c2a45ab2..46af27c56e 100644
--- a/src/Umbraco.Tests/Routing/RoutesCacheTests.cs
+++ b/src/Umbraco.Tests/Routing/RoutesCacheTests.cs
@@ -4,9 +4,9 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
namespace Umbraco.Tests.Routing
{
diff --git a/src/Umbraco.Tests/Routing/UrlProviderTests.cs b/src/Umbraco.Tests/Routing/UrlProviderTests.cs
index f223f2fbea..34a038cffe 100644
--- a/src/Umbraco.Tests/Routing/UrlProviderTests.cs
+++ b/src/Umbraco.Tests/Routing/UrlProviderTests.cs
@@ -9,11 +9,11 @@ using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Stubs;
using Umbraco.Tests.Testing;
using Umbraco.Web.PublishedCache;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.Routing
diff --git a/src/Umbraco.Tests/Routing/UrlRoutesTests.cs b/src/Umbraco.Tests/Routing/UrlRoutesTests.cs
index 4928cd01dc..a794e226f1 100644
--- a/src/Umbraco.Tests/Routing/UrlRoutesTests.cs
+++ b/src/Umbraco.Tests/Routing/UrlRoutesTests.cs
@@ -4,9 +4,9 @@ using NUnit.Framework;
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
namespace Umbraco.Tests.Routing
{
diff --git a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs
index dc9a52835b..be654b4a09 100644
--- a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs
+++ b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs
@@ -8,8 +8,8 @@ using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.Routing
diff --git a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs
index bb06ff894b..3d3533697c 100644
--- a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs
+++ b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs
@@ -6,9 +6,9 @@ using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
using Umbraco.Tests.TestHelpers;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using Umbraco.Web.Routing;
using Umbraco.Core.Services;
+using Umbraco.Tests.LegacyXmlPublishedCache;
namespace Umbraco.Tests.Routing
{
diff --git a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs
index 11479ea3eb..f1fd0c592b 100644
--- a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs
+++ b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs
@@ -12,11 +12,11 @@ using Umbraco.Core.Models;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
using Umbraco.Core.Sync;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
using Umbraco.Web.Cache;
using Umbraco.Web.PublishedCache;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
namespace Umbraco.Tests.Scoping
{
diff --git a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs
index 76b163a2df..2bfc1b6dc8 100644
--- a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs
+++ b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs
@@ -19,7 +19,6 @@ using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Services;
using Umbraco.Web;
using Umbraco.Web.PublishedCache;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using Umbraco.Web.Security;
using Umbraco.Web.Routing;
using File = System.IO.File;
@@ -30,6 +29,7 @@ using Umbraco.Tests.Testing;
using Umbraco.Core.Migrations.Install;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Persistence.Repositories;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.Testing.Objects.Accessors;
namespace Umbraco.Tests.TestHelpers
diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj
index 03d0d4f8cb..8c86873e0a 100644
--- a/src/Umbraco.Tests/Umbraco.Tests.csproj
+++ b/src/Umbraco.Tests/Umbraco.Tests.csproj
@@ -493,6 +493,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs
index fee18cb382..c5c8b5c77d 100644
--- a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs
+++ b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs
@@ -12,13 +12,13 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
+using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;
-using Umbraco.Web.PublishedCache.XmlPublishedCache;
using Umbraco.Web.Routing;
using Umbraco.Web.Security;
diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/xmldataintegrityreport.controller.js b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/xmldataintegrityreport.controller.js
deleted file mode 100644
index bb8696aca0..0000000000
--- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/xmldataintegrityreport.controller.js
+++ /dev/null
@@ -1,62 +0,0 @@
-function XmlDataIntegrityReportController($scope, umbRequestHelper, $log, $http) {
-
- function check(item) {
- var action = item.check;
- umbRequestHelper.resourcePromise(
- $http.get(umbRequestHelper.getApiUrl("xmlDataIntegrityBaseUrl", action)),
- 'Failed to retrieve data integrity status')
- .then(function(result) {
- item.checking = false;
- item.invalid = result === "false";
- });
- }
-
- $scope.fix = function(item) {
- var action = item.fix;
- if (item.fix) {
- if (confirm("This will cause all xml structures for this type to be rebuilt. " +
- "Depending on how much content there is in your site this could take a while. " +
- "It is not recommended to rebuild xml structures if they are not out of sync, during times of high website traffic " +
- "or when editors are editing content.")) {
- item.fixing = true;
- umbRequestHelper.resourcePromise(
- $http.post(umbRequestHelper.getApiUrl("xmlDataIntegrityBaseUrl", action)),
- 'Failed to retrieve data integrity status')
- .then(function(result) {
- item.fixing = false;
- item.invalid = result === "false";
- });
- }
- }
- }
-
- $scope.items = {
- "contentXml": {
- label: "Content in the cmsContentXml table",
- checking: true,
- fixing: false,
- fix: "FixContentXmlTable",
- check: "CheckContentXmlTable"
- },
- "mediaXml": {
- label: "Media in the cmsContentXml table",
- checking: true,
- fixing: false,
- fix: "FixMediaXmlTable",
- check: "CheckMediaXmlTable"
- },
- "memberXml": {
- label: "Members in the cmsContentXml table",
- checking: true,
- fixing: false,
- fix: "FixMembersXmlTable",
- check: "CheckMembersXmlTable"
- }
- };
-
- for (var i in $scope.items) {
- check($scope.items[i]);
- }
-}
-
-angular.module("umbraco").controller("Umbraco.Dashboard.XmlDataIntegrityReportController", XmlDataIntegrityReportController);
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/xmldataintegrityreport.html b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/xmldataintegrityreport.html
deleted file mode 100644
index 11f1834ae4..0000000000
--- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/xmldataintegrityreport.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
Xml Cache Data integrity
-
-
- Loading...
-
-
-
- This checks the data integrity for the xml structures for content, media and members that are stored in the cmsContentXml table.
- This does not check the data integrity of the xml cache file, only the xml structures stored in the database used to create the xml cache file.
-
-
- {{value.label}} ...
- Checking...
- Ok
- Error
-