using System; using System.Linq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; using Umbraco.Tests.TestHelpers; using Umbraco.Web; using Umbraco.Web.Models; namespace Umbraco.Tests.DynamicDocument { /// /// Tests the typed extension methods on IPublishedContent the same way we test the dynamic ones /// [TestFixture] public class PublishedContentTests : BaseWebTest { protected override bool RequiresDbSetup { get { return false; } } protected override string GetXmlContent(int templateId) { return @" ]> 1 This is some content]]> "; } public override void Initialize() { base.Initialize(); PropertyEditorValueConvertersResolver.Current = new PropertyEditorValueConvertersResolver( new[] { typeof(DatePickerPropertyEditorValueConverter), typeof(TinyMcePropertyEditorValueConverter), typeof(YesNoPropertyEditorValueConverter) }); //need to specify a custom callback for unit tests DynamicPublishedContent.GetDataTypeCallback = (docTypeAlias, propertyAlias) => { if (propertyAlias == "content") { //return the rte type id return Guid.Parse("5e9b75ae-face-41c8-b47e-5f4b0fd82f83"); } return Guid.Empty; }; var umbCtx = GetUmbracoContext("/test", 1234); UmbracoContext.Current = umbCtx; PublishedContentStoreResolver.Current = new PublishedContentStoreResolver(new DefaultPublishedContentStore()); } public override void TearDown() { base.TearDown(); PropertyEditorValueConvertersResolver.Reset(); PublishedContentStoreResolver.Reset(); UmbracoContext.Current = null; } internal IPublishedContent GetNode(int id) { var ctx = GetUmbracoContext("/test", 1234); var contentStore = new DefaultPublishedContentStore(); var doc = contentStore.GetDocumentById(ctx, id); Assert.IsNotNull(doc); return doc; } [Test] public void Complex_Linq() { var doc = GetNode(1173); var result = doc.Ancestors().OrderBy(x => x.Level) .Single() .Descendants() .FirstOrDefault(x => x.GetPropertyValue("selectedNodes", "").Split(',').Contains("1173")); Assert.IsNotNull(result); } [Test] public void Index() { var doc = GetNode(1173); Assert.AreEqual(0, doc.Index()); doc = GetNode(1176); Assert.AreEqual(1, doc.Index()); doc = GetNode(1177); Assert.AreEqual(2, doc.Index()); doc = GetNode(1178); Assert.AreEqual(3, doc.Index()); } [Test] public void Is_First() { var doc = GetNode(1046); //test root nodes Assert.IsTrue(doc.IsFirst()); doc = GetNode(1172); Assert.IsFalse(doc.IsFirst()); doc = GetNode(1173); //test normal nodes Assert.IsTrue(doc.IsFirst()); doc = GetNode(1175); Assert.IsFalse(doc.IsFirst()); } [Test] public void Is_Not_First() { var doc = GetNode(1046); //test root nodes Assert.IsFalse(doc.IsNotFirst()); doc = GetNode(1172); Assert.IsTrue(doc.IsNotFirst()); doc = GetNode(1173); //test normal nodes Assert.IsFalse(doc.IsNotFirst()); doc = GetNode(1175); Assert.IsTrue(doc.IsNotFirst()); } [Test] public void Is_Position() { var doc = GetNode(1046); //test root nodes Assert.IsTrue(doc.IsPosition(0)); doc = GetNode(1172); Assert.IsTrue(doc.IsPosition(1)); doc = GetNode(1173); //test normal nodes Assert.IsTrue(doc.IsPosition(0)); doc = GetNode(1175); Assert.IsTrue(doc.IsPosition(1)); } [Test] public void Children_GroupBy_DocumentTypeAlias() { var doc = GetNode(1046); var found1 = doc.Children.GroupBy("DocumentTypeAlias"); Assert.AreEqual(2, found1.Count()); Assert.AreEqual(2, found1.Single(x => x.Key.ToString() == "Home").Count()); Assert.AreEqual(1, found1.Single(x => x.Key.ToString() == "CustomDocument").Count()); } [Test] public void Children_Where_DocumentTypeAlias() { var doc = GetNode(1046); var found1 = doc.Children.Where("DocumentTypeAlias == \"CustomDocument\""); var found2 = doc.Children.Where("DocumentTypeAlias == \"Home\""); Assert.AreEqual(1, found1.Count()); Assert.AreEqual(2, found2.Count()); } [Test] public void Children_Order_By_Update_Date() { var doc = GetNode(1173); var ordered = doc.Children.OrderBy("UpdateDate"); var correctOrder = new[] { 1178, 1177, 1174, 1176 }; for (var i = 0; i < correctOrder.Length; i++) { Assert.AreEqual(correctOrder[i], ordered.ElementAt(i).Id); } } [Test] public void HasProperty() { var doc = GetNode(1173); var hasProp = doc.HasProperty("umbracoUrlAlias"); Assert.AreEqual(true, (bool)hasProp); } [Test] public void HasValue() { var doc = GetNode(1173); var hasValue = doc.HasValue("umbracoUrlAlias"); var noValue = doc.HasValue("blahblahblah"); Assert.IsTrue(hasValue); Assert.IsFalse(noValue); } [Test] public void Ancestors_Where_Visible() { var doc = GetNode(1174); var whereVisible = doc.Ancestors().Where("Visible"); Assert.AreEqual(1, whereVisible.Count()); } [Test] public void Visible() { var hidden = GetNode(1046); var visible = GetNode(1173); Assert.IsFalse(hidden.IsVisible()); Assert.IsTrue(visible.IsVisible()); } [Test] public void Ensure_TinyMCE_Converted_Type_User_Property() { var doc = GetNode(1173); throw new NotImplementedException("We currently don't have an extension method to return the formatted value using IPropertyValueConverter! This currently only works in the dynamic implementation"); //Assert.IsTrue(TypeHelper.IsTypeAssignableFrom(doc.GetPropertyValue().Content.GetType())); //Assert.AreEqual("
This is some content
", doc.Content.ToString()); } [Test] public void Ancestor_Or_Self() { var doc = GetNode(1173); var result = doc.AncestorOrSelf(); Assert.IsNotNull(result); Assert.AreEqual((int)1046, (int)result.Id); } [Test] public void Ancestors_Or_Self() { var doc = GetNode(1174); var result = doc.AncestorsOrSelf(); Assert.IsNotNull(result); Assert.AreEqual(3, result.Count()); Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1174, 1173, 1046 })); } [Test] public void Ancestors() { var doc = GetNode(1174); var result = doc.Ancestors(); Assert.IsNotNull(result); Assert.AreEqual(2, result.Count()); Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1173, 1046 })); } [Test] public void Descendants_Or_Self() { var doc = GetNode(1046); var result = doc.DescendantsOrSelf(); Assert.IsNotNull(result); Assert.AreEqual(7, result.Count()); Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1046, 1173, 1174, 1176, 1175 })); } [Test] public void Descendants() { var doc = GetNode(1046); var result = doc.Descendants(); Assert.IsNotNull(result); Assert.AreEqual(6, result.Count()); Assert.IsTrue(result.Select(x => ((dynamic)x).Id).ContainsAll(new dynamic[] { 1173, 1174, 1176, 1175 })); } [Test] public void Up() { var doc = GetNode(1173); var result = doc.Up(); Assert.IsNotNull(result); Assert.AreEqual((int)1046, (int)result.Id); } [Test] public void Down() { var doc = GetNode(1173); var result = doc.Down(); Assert.IsNotNull(result); Assert.AreEqual((int)1174, (int)result.Id); } [Test] public void Next() { var doc = GetNode(1173); var result = doc.Next(); Assert.IsNotNull(result); Assert.AreEqual((int)1175, (int)result.Id); } [Test] public void Next_Without_Sibling() { var doc = GetNode(1178); Assert.IsNull(doc.Next()); } [Test] public void Previous_Without_Sibling() { var doc = GetNode(1173); Assert.IsNull(doc.Previous()); } [Test] public void Previous() { var doc = GetNode(1176); var result = doc.Previous(); Assert.IsNotNull(result); Assert.AreEqual((int)1174, (int)result.Id); } } }