using System.Linq; using System.Xml; using Moq; using NUnit.Framework; using umbraco.BusinessLogic; using Umbraco.Core.Models.PublishedContent; using Umbraco.Tests.TestHelpers; using Umbraco.Web; using Umbraco.Web.PublishedCache; using Umbraco.Web.PublishedCache.XmlPublishedCache; using Umbraco.Web.Security; namespace Umbraco.Tests.Cache.PublishedCache { [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] [TestFixture] public class PublishContentCacheTests : BaseWebTest { private FakeHttpContextFactory _httpContextFactory; private UmbracoContext _umbracoContext; private ContextualPublishedContentCache _cache; private XmlDocument _xml; private string GetXml() { return @" ]> "; } [SetUp] public override void Initialize() { base.Initialize(); _httpContextFactory = new FakeHttpContextFactory("~/Home"); //ensure the StateHelper is using our custom context StateHelper.HttpContext = _httpContextFactory.HttpContext; var settings = SettingsForTests.GenerateMockSettings(); SettingsForTests.ConfigureSettings(settings); _xml = new XmlDocument(); _xml.LoadXml(GetXml()); var cache = new PublishedContentCache { GetXmlDelegate = (context, preview) => _xml }; _umbracoContext = new UmbracoContext( _httpContextFactory.HttpContext, ApplicationContext, new PublishedCaches(cache, new PublishedMediaCache(ApplicationContext)), new WebSecurity(_httpContextFactory.HttpContext, ApplicationContext)); _cache = _umbracoContext.ContentCache; } protected override void FreezeResolution() { PublishedContentModelFactoryResolver.Current = new PublishedContentModelFactoryResolver(); base.FreezeResolution(); } [Test] public void Has_Content() { Assert.IsTrue(_cache.HasContent()); } [Test] public void Get_Root_Docs() { var result = _cache.GetAtRoot(); Assert.AreEqual(2, result.Count()); Assert.AreEqual(1046, result.ElementAt(0).Id); Assert.AreEqual(1172, result.ElementAt(1).Id); } [TestCase("/", 1046)] [TestCase("/home", 1046)] [TestCase("/Home", 1046)] //test different cases [TestCase("/home/sub1", 1173)] [TestCase("/Home/sub1", 1173)] [TestCase("/home/Sub1", 1173)] //test different cases [TestCase("/home/Sub'Apostrophe", 1177)] public void Get_Node_By_Route(string route, int nodeId) { var result = _cache.GetByRoute(route, false); Assert.IsNotNull(result); Assert.AreEqual(nodeId, result.Id); } [TestCase("/", 1046)] [TestCase("/sub1", 1173)] [TestCase("/Sub1", 1173)] public void Get_Node_By_Route_Hiding_Top_Level_Nodes(string route, int nodeId) { var result = _cache.GetByRoute(route, true); Assert.IsNotNull(result); Assert.AreEqual(nodeId, result.Id); } } }