using System.Collections.Generic; using NUnit.Framework; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Web; using Umbraco.Cms.Tests.Common.Testing; using Umbraco.Extensions; using Umbraco.Tests.Testing; namespace Umbraco.Tests.PublishedContent { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)] public class PublishedContentExtensionTests : PublishedContentTestBase { private IUmbracoContext _ctx; private string _xmlContent = ""; private bool _createContentTypes = true; private Dictionary _contentTypes; protected override string GetXmlContent(int templateId) { return _xmlContent; } [Test] public void IsDocumentType_NonRecursive_ActualType_ReturnsTrue() { InitializeInheritedContentTypes(); var publishedContent = _ctx.Content.GetById(1100); Assert.That(publishedContent.IsDocumentType("inherited", false)); } [Test] public void IsDocumentType_NonRecursive_BaseType_ReturnsFalse() { InitializeInheritedContentTypes(); var publishedContent = _ctx.Content.GetById(1100); Assert.That(publishedContent.IsDocumentType("base", false), Is.False); } [Test] public void IsDocumentType_Recursive_ActualType_ReturnsTrue() { InitializeInheritedContentTypes(); var publishedContent = _ctx.Content.GetById(1100); Assert.That(publishedContent.IsDocumentType("inherited", true)); } [Test] public void IsDocumentType_Recursive_BaseType_ReturnsTrue() { InitializeInheritedContentTypes(); ContentTypesCache.GetPublishedContentTypeByAlias = null; var publishedContent = _ctx.Content.GetById(1100); Assert.That(publishedContent.IsDocumentType("base", true)); } [Test] public void IsDocumentType_Recursive_InvalidBaseType_ReturnsFalse() { InitializeInheritedContentTypes(); var publishedContent = _ctx.Content.GetById(1100); Assert.That(publishedContent.IsDocumentType("invalidbase", true), Is.False); } private void InitializeInheritedContentTypes() { _ctx = GetUmbracoContext("/", 1, null, true); if (_createContentTypes) { var contentTypeService = ServiceContext.ContentTypeService; var baseType = new ContentType(ShortStringHelper, -1) { Alias = "base", Name = "Base" }; const string contentTypeAlias = "inherited"; var inheritedType = new ContentType(ShortStringHelper, baseType, contentTypeAlias) { Alias = contentTypeAlias, Name = "Inherited" }; contentTypeService.Save(baseType); contentTypeService.Save(inheritedType); _contentTypes = new Dictionary { { baseType.Alias, new PublishedContentType(baseType, null) }, { inheritedType.Alias, new PublishedContentType(inheritedType, null) } }; ContentTypesCache.GetPublishedContentTypeByAlias = alias => _contentTypes[alias]; _createContentTypes = false; } ContentTypesCache.GetPublishedContentTypeByAlias = alias => _contentTypes[alias]; _xmlContent = @" ]> "; } } }