using System; using System.Collections.Generic; using System.Linq; using System.Threading; using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.Services { /// /// Tests covering all methods in the ContentService class. /// This is more of an integration test as it involves multiple layers /// as well as configuration. /// [TestFixture, RequiresSTA] public class ContentServiceTests : BaseServiceTest { [SetUp] public override void Initialize() { base.Initialize(); } [TearDown] public override void TearDown() { base.TearDown(); } //TODO Add test to verify there is only ONE newest document/content in cmsDocument table after updating. //TODO Add test to delete specific version (with and without deleting prior versions) and versions by date. [Test] public void Can_Remove_Property_Type() { // Arrange var contentService = ServiceContext.ContentService; // Act var content = contentService.CreateContent("Test", -1, "umbTextpage", 0); // Assert Assert.That(content, Is.Not.Null); Assert.That(content.HasIdentity, Is.False); } [Test] public void Can_Create_Content() { // Arrange var contentService = ServiceContext.ContentService; // Act var content = contentService.CreateContent("Test", -1, "umbTextpage", 0); // Assert Assert.That(content, Is.Not.Null); Assert.That(content.HasIdentity, Is.False); } [Test] public void Can_Create_Content_Without_Explicitly_Set_User() { // Arrange var contentService = ServiceContext.ContentService as ContentService; // Act var content = contentService.CreateContent("Test", -1, "umbTextpage"); // Assert Assert.That(content, Is.Not.Null); Assert.That(content.HasIdentity, Is.False); Assert.That(content.CreatorId, Is.EqualTo(0));//Default to zero/administrator } [Test] public void Can_Save_New_Content_With_Explicit_User() { var user = new User(ServiceContext.UserService.GetUserTypeByAlias("admin")) { Name = "Test", Email = "test@test.com", Username = "test", Password = "test" }; ServiceContext.UserService.Save(user); var content = new Content("Test", -1, ServiceContext.ContentTypeService.GetContentType("umbTextpage")); // Act ServiceContext.ContentService.Save(content, (int)user.Id); // Assert Assert.That(content.CreatorId, Is.EqualTo(user.Id)); Assert.That(content.WriterId, Is.EqualTo(user.Id)); } [Test] public void Cannot_Create_Content_With_Non_Existing_ContentType_Alias() { // Arrange var contentService = ServiceContext.ContentService; // Act & Assert Assert.Throws(() => contentService.CreateContent("Test", -1, "umbAliasDoesntExist")); } [Test] public void Can_Get_Content_By_Id() { // Arrange var contentService = ServiceContext.ContentService; // Act var content = contentService.GetById(NodeDto.NodeIdSeed + 1); // Assert Assert.That(content, Is.Not.Null); Assert.That(content.Id, Is.EqualTo(NodeDto.NodeIdSeed + 1)); } [Test] public void Can_Get_Content_By_Guid_Key() { // Arrange var contentService = ServiceContext.ContentService; // Act var content = contentService.GetById(new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); // Assert Assert.That(content, Is.Not.Null); Assert.That(content.Id, Is.EqualTo(NodeDto.NodeIdSeed + 1)); } [Test] public void Can_Get_Content_By_Level() { // Arrange var contentService = ServiceContext.ContentService; // Act var contents = contentService.GetByLevel(2); // Assert Assert.That(contents, Is.Not.Null); Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.GreaterThanOrEqualTo(2)); } [Test] public void Can_Get_Children_Of_Content_Id() { // Arrange var contentService = ServiceContext.ContentService; // Act var contents = contentService.GetChildren(NodeDto.NodeIdSeed + 1); // Assert Assert.That(contents, Is.Not.Null); Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.GreaterThanOrEqualTo(2)); } [Test] public void Can_Get_Descendents_Of_Contnet() { // Arrange var contentService = ServiceContext.ContentService; var hierarchy = CreateContentHierarchy(); contentService.Save(hierarchy, 0); // Act var contents = contentService.GetDescendants(NodeDto.NodeIdSeed + 1); // Assert Assert.That(contents, Is.Not.Null); Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.EqualTo(52)); } [Test] public void Can_Get_All_Versions_Of_Content() { // Arrange var contentService = ServiceContext.ContentService; var parent = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 1); ServiceContext.ContentService.Publish(parent);//Publishing root, so Text Page 2 can be updated. var subpage2 = contentService.GetById(NodeDto.NodeIdSeed + 3); subpage2.Name = "Text Page 2 Updated"; subpage2.SetValue("author", "Jane Doe"); contentService.SaveAndPublish(subpage2, 0);//NOTE New versions are only added between publish-state-changed, so publishing to ensure addition version. // Act var versions = contentService.GetVersions(NodeDto.NodeIdSeed + 3); // Assert Assert.That(versions.Any(), Is.True); Assert.That(versions.Count(), Is.GreaterThanOrEqualTo(2)); } [Test] public void Can_Get_Root_Content() { // Arrange var contentService = ServiceContext.ContentService; // Act var contents = contentService.GetRootContent(); // Assert Assert.That(contents, Is.Not.Null); Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.EqualTo(1)); } [Test] public void Can_Get_Content_For_Expiration() { // Arrange var contentService = ServiceContext.ContentService; var root = contentService.GetById(NodeDto.NodeIdSeed + 1); contentService.SaveAndPublish(root); var content = contentService.GetById(NodeDto.NodeIdSeed + 3); content.ExpireDate = DateTime.Now.AddSeconds(1); contentService.SaveAndPublish(content); // Act Thread.Sleep(new TimeSpan(0, 0, 0, 2)); var contents = contentService.GetContentForExpiration(); // Assert Assert.That(DateTime.Now.AddMinutes(-5) <= DateTime.Now); Assert.That(contents, Is.Not.Null); Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.EqualTo(1)); } [Test] public void Can_Get_Content_For_Release() { // Arrange var contentService = ServiceContext.ContentService; // Act var contents = contentService.GetContentForRelease(); // Assert Assert.That(DateTime.Now.AddMinutes(-5) <= DateTime.Now); Assert.That(contents, Is.Not.Null); Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.EqualTo(1)); } [Test] public void Can_Get_Content_In_RecycleBin() { // Arrange var contentService = ServiceContext.ContentService; // Act var contents = contentService.GetContentInRecycleBin(); // Assert Assert.That(contents, Is.Not.Null); Assert.That(contents.Any(), Is.True); Assert.That(contents.Count(), Is.EqualTo(1)); } [Test] public void Can_UnPublish_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 1); bool published = contentService.Publish(content, 0); // Act bool unpublished = contentService.UnPublish(content, 0); // Assert Assert.That(published, Is.True); Assert.That(unpublished, Is.True); Assert.That(content.Published, Is.False); } /// /// This test is ignored because the way children are handled when /// parent is unpublished is treated differently now then from when this test /// was written. /// The correct case is now that Root is UnPublished removing the children /// from cache, but still having them "Published" in the "background". /// Once the Parent is Published the Children should re-appear as published. /// [Test, NUnit.Framework.Ignore] public void Can_UnPublish_Root_Content_And_Verify_Children_Is_UnPublished() { // Arrange var contentService = ServiceContext.ContentService; var published = contentService.RePublishAll(0); var content = contentService.GetById(NodeDto.NodeIdSeed + 1); // Act bool unpublished = contentService.UnPublish(content, 0); var children = contentService.GetChildren(NodeDto.NodeIdSeed + 1); // Assert Assert.That(published, Is.True);//Verify that everything was published //Verify that content with Id (NodeDto.NodeIdSeed + 1) was unpublished Assert.That(unpublished, Is.True); Assert.That(content.Published, Is.False); //Verify that all children was unpublished Assert.That(children.Any(x => x.Published), Is.False); Assert.That(children.First(x => x.Id == NodeDto.NodeIdSeed + 2).Published, Is.False);//Released 5 mins ago, but should be unpublished Assert.That(children.First(x => x.Id == NodeDto.NodeIdSeed + 2).ReleaseDate.HasValue, Is.False);//Verify that the release date has been removed Assert.That(children.First(x => x.Id == NodeDto.NodeIdSeed + 3).Published, Is.False);//Expired 5 mins ago, so isn't be published } [Test] public void Can_RePublish_All_Content() { // Arrange var contentService = (ContentService)ServiceContext.ContentService; var rootContent = contentService.GetRootContent(); foreach (var c in rootContent) { contentService.PublishWithChildren(c); } var allContent = rootContent.Concat(rootContent.SelectMany(x => x.Descendants())); //for testing we need to clear out the contentXml table so we can see if it worked var provider = new PetaPocoUnitOfWorkProvider(); var uow = provider.GetUnitOfWork(); using (RepositoryResolver.Current.ResolveByType(uow)) { uow.Database.TruncateTable("cmsContentXml"); } //for this test we are also going to save a revision for a content item that is not published, this is to ensure //that it's published version still makes it into the cmsContentXml table! contentService.Save(allContent.Last()); // Act var published = contentService.RePublishAll(0); // Assert Assert.IsTrue(published); uow = provider.GetUnitOfWork(); using (var repo = RepositoryResolver.Current.ResolveByType(uow)) { Assert.AreEqual(allContent.Count(), uow.Database.ExecuteScalar("select count(*) from cmsContentXml")); } } [Test] public void Can_RePublish_All_Content_Of_Type() { // Arrange var contentService = (ContentService)ServiceContext.ContentService; var rootContent = contentService.GetRootContent(); foreach (var c in rootContent) { contentService.PublishWithChildren(c); } var allContent = rootContent.Concat(rootContent.SelectMany(x => x.Descendants())); //for testing we need to clear out the contentXml table so we can see if it worked var provider = new PetaPocoUnitOfWorkProvider(); var uow = provider.GetUnitOfWork(); using (RepositoryResolver.Current.ResolveByType(uow)) { uow.Database.TruncateTable("cmsContentXml"); } //for this test we are also going to save a revision for a content item that is not published, this is to ensure //that it's published version still makes it into the cmsContentXml table! contentService.Save(allContent.Last()); // Act contentService.RePublishAll(new int[] { allContent.Last().ContentTypeId }); // Assert uow = provider.GetUnitOfWork(); using (var repo = RepositoryResolver.Current.ResolveByType(uow)) { Assert.AreEqual(allContent.Count(), uow.Database.ExecuteScalar("select count(*) from cmsContentXml")); } } [Test] public void Can_Publish_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 1); // Act bool published = contentService.Publish(content, 0); // Assert Assert.That(published, Is.True); Assert.That(content.Published, Is.True); } [Test] public void Can_Publish_Only_Valid_Content() { // Arrange var contentService = ServiceContext.ContentService; var contentTypeService = ServiceContext.ContentTypeService; var contentType = MockedContentTypes.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", true); contentTypeService.Save(contentType); Content content = MockedContent.CreateSimpleContent(contentType, "Invalid Content", NodeDto.NodeIdSeed + 1); content.SetValue("author", string.Empty); contentService.Save(content, 0); // Act var parent = contentService.GetById(NodeDto.NodeIdSeed + 1); bool parentPublished = contentService.Publish(parent, 0); bool published = contentService.Publish(content, 0); // Assert Assert.That(parentPublished, Is.True); Assert.That(published, Is.False); Assert.That(content.IsValid(), Is.False); Assert.That(parent.Published, Is.True); Assert.That(content.Published, Is.False); } [Test] public void Can_Publish_Content_Children() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 1); // Act bool published = contentService.PublishWithChildren(content, 0); var children = contentService.GetChildren(NodeDto.NodeIdSeed + 1); // Assert Assert.That(published, Is.True);//Nothing was cancelled, so should be true Assert.That(content.Published, Is.True);//No restrictions, so should be published Assert.That(children.First(x => x.Id == NodeDto.NodeIdSeed + 2).Published, Is.True);//Released 5 mins ago, so should be published } [Test] public void Cannot_Publish_Expired_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 3); //This Content expired 5min ago content.ExpireDate = DateTime.Now.AddMinutes(-5); contentService.Save(content); var parent = contentService.GetById(NodeDto.NodeIdSeed + 1); bool parentPublished = contentService.Publish(parent, 0);//Publish root Home node to enable publishing of 'NodeDto.NodeIdSeed + 3' // Act bool published = contentService.Publish(content, 0); // Assert Assert.That(parentPublished, Is.True); Assert.That(published, Is.False); Assert.That(content.Published, Is.False); } [Test] public void Cannot_Publish_Content_Awaiting_Release() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 2); content.ReleaseDate = DateTime.Now.AddHours(2); contentService.Save(content, 0); var parent = contentService.GetById(NodeDto.NodeIdSeed + 1); bool parentPublished = contentService.Publish(parent, 0);//Publish root Home node to enable publishing of 'NodeDto.NodeIdSeed + 3' // Act bool published = contentService.Publish(content, 0); // Assert Assert.That(parentPublished, Is.True); Assert.That(published, Is.False); Assert.That(content.Published, Is.False); } [Test] public void Cannot_Publish_Content_Where_Parent_Is_Unpublished() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.CreateContent("Subpage with Unpublisehed Parent", NodeDto.NodeIdSeed + 1, "umbTextpage", 0); contentService.Save(content, 0); // Act bool published = contentService.PublishWithChildren(content, 0); // Assert Assert.That(published, Is.False); Assert.That(content.Published, Is.False); } [Test] public void Cannot_Publish_Trashed_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 4); // Act bool published = contentService.Publish(content, 0); // Assert Assert.That(published, Is.False); Assert.That(content.Published, Is.False); Assert.That(content.Trashed, Is.True); } [Test] public void Can_Save_And_Publish_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.CreateContent("Home US", -1, "umbTextpage", 0); content.SetValue("author", "Barack Obama"); // Act bool published = contentService.SaveAndPublish(content, 0); // Assert Assert.That(content.HasIdentity, Is.True); Assert.That(content.Published, Is.True); Assert.That(published, Is.True); } [Test] public void Can_Get_Published_Descendant_Versions() { // Arrange var contentService = ServiceContext.ContentService; var root = contentService.GetById(NodeDto.NodeIdSeed + 1); var rootPublished = contentService.Publish(root); var content = contentService.GetById(NodeDto.NodeIdSeed + 3); content.Properties["title"].Value = content.Properties["title"].Value + " Published"; bool published = contentService.SaveAndPublish(content); var publishedVersion = content.Version; content.Properties["title"].Value = content.Properties["title"].Value + " Saved"; contentService.Save(content); var savedVersion = content.Version; // Act var publishedDescendants = ((ContentService)contentService).GetPublishedDescendants(root); // Assert Assert.That(rootPublished, Is.True); Assert.That(published, Is.True); Assert.That(publishedDescendants.Any(x => x.Version == publishedVersion), Is.True); Assert.That(publishedDescendants.Any(x => x.Version == savedVersion), Is.False); //Ensure that the published content version has the correct property value and is marked as published var publishedContentVersion = publishedDescendants.First(x => x.Version == publishedVersion); Assert.That(publishedContentVersion.Published, Is.True); Assert.That(publishedContentVersion.Properties["title"].Value, Contains.Substring("Published")); //Ensure that the saved content version has the correct property value and is not marked as published var savedContentVersion = contentService.GetByVersion(savedVersion); Assert.That(savedContentVersion.Published, Is.False); Assert.That(savedContentVersion.Properties["title"].Value, Contains.Substring("Saved")); //Ensure that the latest version of the content is the saved and not-yet-published one var currentContent = contentService.GetById(NodeDto.NodeIdSeed + 3); Assert.That(currentContent.Published, Is.False); Assert.That(currentContent.Properties["title"].Value, Contains.Substring("Saved")); Assert.That(currentContent.Version, Is.EqualTo(savedVersion)); } [Test] public void Can_Save_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.CreateContent("Home US", -1, "umbTextpage", 0); content.SetValue("author", "Barack Obama"); // Act contentService.Save(content, 0); // Assert Assert.That(content.HasIdentity, Is.True); } [Test] public void Can_Bulk_Save_Content() { // Arrange var contentService = ServiceContext.ContentService; var contentTypeService = ServiceContext.ContentTypeService; var contentType = contentTypeService.GetContentType("umbTextpage"); Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Subpage 1", NodeDto.NodeIdSeed + 2); Content subpage2 = MockedContent.CreateSimpleContent(contentType, "Text Subpage 2", NodeDto.NodeIdSeed + 2); var list = new List { subpage, subpage2 }; // Act contentService.Save(list, 0); // Assert Assert.That(list.Any(x => !x.HasIdentity), Is.False); } [Test] public void Can_Bulk_Save_New_Hierarchy_Content() { // Arrange var contentService = ServiceContext.ContentService; var hierarchy = CreateContentHierarchy(); // Act contentService.Save(hierarchy, 0); Assert.That(hierarchy.Any(), Is.True); Assert.That(hierarchy.Any(x => x.HasIdentity == false), Is.False); //all parent id's should be ok, they are lazy and if they equal zero an exception will be thrown Assert.DoesNotThrow(() => hierarchy.Any(x => x.ParentId != 0)); } [Test] public void Can_Delete_Content_Of_Specific_ContentType() { // Arrange var contentService = ServiceContext.ContentService; var contentTypeService = ServiceContext.ContentTypeService; var contentType = contentTypeService.GetContentType("umbTextpage"); // Act contentService.DeleteContentOfType(contentType.Id); var rootContent = contentService.GetRootContent(); var contents = contentService.GetContentOfContentType(contentType.Id); // Assert Assert.That(rootContent.Any(), Is.False); Assert.That(contents.Any(x => !x.Trashed), Is.False); } [Test] public void Can_Delete_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 4); // Act contentService.Delete(content, 0); var deleted = contentService.GetById(NodeDto.NodeIdSeed + 4); // Assert Assert.That(deleted, Is.Null); } [Test] public void Can_Move_Content_To_RecycleBin() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 3); // Act contentService.MoveToRecycleBin(content, 0); // Assert Assert.That(content.ParentId, Is.EqualTo(-20)); Assert.That(content.Trashed, Is.True); } [Test] public void Can_Move_Content_Structure_To_RecycleBin_And_Empty_RecycleBin() { // Arrange var contentService = ServiceContext.ContentService; var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage"); Content subsubpage = MockedContent.CreateSimpleContent(contentType, "Text Page 3", NodeDto.NodeIdSeed + 2); contentService.Save(subsubpage, 0); var content = contentService.GetById(NodeDto.NodeIdSeed + 1); // Act contentService.MoveToRecycleBin(content, 0); var descendants = contentService.GetDescendants(content); // Assert Assert.That(content.ParentId, Is.EqualTo(-20)); Assert.That(content.Trashed, Is.True); Assert.That(descendants.Count(), Is.EqualTo(3)); Assert.That(descendants.Any(x => x.Path.Contains("-20") == false), Is.False); //Empty Recycle Bin contentService.EmptyRecycleBin(); var trashed = contentService.GetContentInRecycleBin(); Assert.That(trashed.Any(), Is.False); } [Test] public void Can_Empty_RecycleBin() { // Arrange var contentService = ServiceContext.ContentService; // Act contentService.EmptyRecycleBin(); var contents = contentService.GetContentInRecycleBin(); // Assert Assert.That(contents.Any(), Is.False); } [Test] public void Can_Move_Content() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 4); // Act - moving out of recycle bin contentService.Move(content, NodeDto.NodeIdSeed + 1, 0); // Assert Assert.That(content.ParentId, Is.EqualTo(NodeDto.NodeIdSeed + 1)); Assert.That(content.Trashed, Is.False); Assert.That(content.Published, Is.False); } [Test] public void Can_Copy_Content() { // Arrange var contentService = ServiceContext.ContentService; var temp = contentService.GetById(NodeDto.NodeIdSeed + 3); // Act var copy = contentService.Copy(temp, temp.ParentId, false, 0); var content = contentService.GetById(NodeDto.NodeIdSeed + 3); // Assert Assert.That(copy, Is.Not.Null); Assert.That(copy.Id, Is.Not.EqualTo(content.Id)); Assert.AreNotSame(content, copy); foreach (var property in copy.Properties) { Assert.AreNotEqual(property.Id, content.Properties[property.Alias].Id); Assert.AreEqual(property.Value, content.Properties[property.Alias].Value); } //Assert.AreNotEqual(content.Name, copy.Name); } [Test, NUnit.Framework.Ignore] public void Can_Send_To_Publication() { } [Test] public void Can_Rollback_Version_On_Content() { // Arrange var contentService = ServiceContext.ContentService; var parent = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 1); ServiceContext.ContentService.Publish(parent);//Publishing root, so Text Page 2 can be updated. var subpage2 = contentService.GetById(NodeDto.NodeIdSeed + 3); var version = subpage2.Version; var nameBeforeRollback = subpage2.Name; subpage2.Name = "Text Page 2 Updated"; subpage2.SetValue("author", "Jane Doe"); contentService.SaveAndPublish(subpage2, 0);//Saving and publishing, so a new version is created // Act var rollback = contentService.Rollback(NodeDto.NodeIdSeed + 3, version, 0); // Assert Assert.That(rollback, Is.Not.Null); Assert.AreNotEqual(rollback.Version, subpage2.Version); Assert.That(rollback.GetValue("author"), Is.Not.EqualTo("Jane Doe")); Assert.AreEqual(nameBeforeRollback, rollback.Name); } [Test] public void Can_Save_Lazy_Content() { var unitOfWork = PetaPocoUnitOfWorkProvider.CreateUnitOfWork(); var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage"); var root = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 1); var c = new Lazy(() => MockedContent.CreateSimpleContent(contentType, "Hierarchy Simple Text Page", root.Id)); var c2 = new Lazy(() => MockedContent.CreateSimpleContent(contentType, "Hierarchy Simple Text Subpage", c.Value.Id)); var list = new List> { c, c2 }; var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); foreach (var content in list) { repository.AddOrUpdate(content.Value); unitOfWork.Commit(); } Assert.That(c.Value.HasIdentity, Is.True); Assert.That(c2.Value.HasIdentity, Is.True); Assert.That(c.Value.Id > 0, Is.True); Assert.That(c2.Value.Id > 0, Is.True); Assert.That(c.Value.ParentId > 0, Is.True); Assert.That(c2.Value.ParentId > 0, Is.True); } [Test] public void Can_Verify_Content_Has_Published_Version() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 1); bool published = contentService.PublishWithChildren(content, 0); var homepage = contentService.GetById(NodeDto.NodeIdSeed + 1); homepage.Name = "Homepage"; ServiceContext.ContentService.Save(homepage); // Act bool hasPublishedVersion = ServiceContext.ContentService.HasPublishedVersion(NodeDto.NodeIdSeed + 1); // Assert Assert.That(published, Is.True); Assert.That(homepage.Published, Is.False); Assert.That(hasPublishedVersion, Is.True); } [Test] public void Can_Verify_Property_Types_On_Content() { // Arrange var contentTypeService = ServiceContext.ContentTypeService; var contentType = MockedContentTypes.CreateAllTypesContentType("allDataTypes", "All DataTypes"); contentTypeService.Save(contentType); var contentService = ServiceContext.ContentService; var content = MockedContent.CreateAllTypesContent(contentType, "Random Content", -1); contentService.Save(content); var id = content.Id; // Act var sut = contentService.GetById(id); // Arrange Assert.That(sut.GetValue("isTrue"), Is.True); Assert.That(sut.GetValue("number"), Is.EqualTo(42)); Assert.That(sut.GetValue("bodyText"), Is.EqualTo("Lorem Ipsum Body Text Test")); Assert.That(sut.GetValue("singleLineText"), Is.EqualTo("Single Line Text Test")); Assert.That(sut.GetValue("multilineText"), Is.EqualTo("Multiple lines \n in one box")); Assert.That(sut.GetValue("upload"), Is.EqualTo("/media/1234/koala.jpg")); Assert.That(sut.GetValue("label"), Is.EqualTo("Non-editable label")); //SD: This is failing because the 'content' call to GetValue always has empty milliseconds //MCH: I'm guessing this is an issue because of the format the date is actually stored as, right? Cause we don't do any formatting when saving or loading Assert.That(sut.GetValue("dateTime").ToString("G"), Is.EqualTo(content.GetValue("dateTime").ToString("G"))); Assert.That(sut.GetValue("colorPicker"), Is.EqualTo("black")); Assert.That(sut.GetValue("folderBrowser"), Is.Empty); Assert.That(sut.GetValue("ddlMultiple"), Is.EqualTo("1234,1235")); Assert.That(sut.GetValue("rbList"), Is.EqualTo("random")); Assert.That(sut.GetValue("date").ToString("G"), Is.EqualTo(content.GetValue("date").ToString("G"))); Assert.That(sut.GetValue("ddl"), Is.EqualTo("1234")); Assert.That(sut.GetValue("chklist"), Is.EqualTo("randomc")); Assert.That(sut.GetValue("contentPicker"), Is.EqualTo(1090)); Assert.That(sut.GetValue("mediaPicker"), Is.EqualTo(1091)); Assert.That(sut.GetValue("memberPicker"), Is.EqualTo(1092)); Assert.That(sut.GetValue("relatedLinks"), Is.EqualTo("")); Assert.That(sut.GetValue("tags"), Is.EqualTo("this,is,tags")); } [Test] public void Can_Delete_Previous_Versions_Not_Latest() { // Arrange var contentService = ServiceContext.ContentService; var content = contentService.GetById(NodeDto.NodeIdSeed + 4); var version = content.Version; // Act contentService.DeleteVersion(NodeDto.NodeIdSeed + 4, version, true, 0); var sut = contentService.GetById(NodeDto.NodeIdSeed + 4); // Assert Assert.That(sut.Version, Is.EqualTo(version)); } private IEnumerable CreateContentHierarchy() { var contentType = ServiceContext.ContentTypeService.GetContentType("umbTextpage"); var root = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 1); var list = new List(); for (int i = 0; i < 10; i++) { var content = MockedContent.CreateSimpleContent(contentType, "Hierarchy Simple Text Page " + i, root); list.Add(content); list.AddRange(CreateChildrenOf(contentType, content, 4)); Console.WriteLine("Created: 'Hierarchy Simple Text Page {0}'", i); } return list; } private IEnumerable CreateChildrenOf(IContentType contentType, IContent content, int depth) { var list = new List(); for (int i = 0; i < depth; i++) { var c = MockedContent.CreateSimpleContent(contentType, "Hierarchy Simple Text Subpage " + i, content); list.Add(c); Console.WriteLine("Created: 'Hierarchy Simple Text Subpage {0}' - Depth: {1}", i, depth); } return list; } } }