From ef962b6934319ee6ffb7476ad1fe8b427bb4f16d Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sun, 11 Oct 2020 22:31:54 +0200 Subject: [PATCH] Migrated ContentServiceTests. --- .../Builders/ContentBuilder.cs | 37 +- .../Builders/ContentTypeBuilder.cs | 186 ++- .../Repositories/TemplateRepositoryTest.cs | 5 +- .../Services/ContentServiceTests.cs | 1471 ++++++++--------- .../Testing/UmbracoIntegrationTest.cs | 10 +- .../UmbracoIntegrationTestWithContent.cs | 54 + .../Models/RelationTypeTests.cs | 2 + src/Umbraco.Tests/Umbraco.Tests.csproj | 3 +- 8 files changed, 998 insertions(+), 770 deletions(-) rename src/{Umbraco.Tests => Umbraco.Tests.Integration}/Services/ContentServiceTests.cs (67%) create mode 100644 src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTestWithContent.cs diff --git a/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs index e86c28cfd9..ac91ea4c47 100644 --- a/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs @@ -5,6 +5,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders.Interfaces; using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Tests.Testing; +using Umbraco.Core; namespace Umbraco.Tests.Common.Builders { @@ -122,10 +123,7 @@ namespace Umbraco.Tests.Common.Builders Content content; if (parent != null) { - content = new Content(name, parent, contentType, culture) - { - ParentId = parent.Id - }; + content = new Content(name, parent, contentType, culture); } else { @@ -272,6 +270,37 @@ namespace Umbraco.Tests.Common.Builders return list; } + public static Content CreateAllTypesContent(IContentType contentType, string name, int parentId) + { + var content = new ContentBuilder() + .WithName(name) + .WithParentId(parentId) + .WithContentType(contentType) + .Build(); + + content.SetValue("isTrue", true); + content.SetValue("number", 42); + content.SetValue("bodyText", "Lorem Ipsum Body Text Test"); + content.SetValue("singleLineText", "Single Line Text Test"); + content.SetValue("multilineText", "Multiple lines \n in one box"); + content.SetValue("upload", "/media/1234/koala.jpg"); + content.SetValue("label", "Non-editable label"); + content.SetValue("dateTime", DateTime.Now.AddDays(-20)); + content.SetValue("colorPicker", "black"); + content.SetValue("ddlMultiple", "1234,1235"); + content.SetValue("rbList", "random"); + content.SetValue("date", DateTime.Now.AddDays(-10)); + content.SetValue("ddl", "1234"); + content.SetValue("chklist", "randomc"); + content.SetValue("contentPicker", Udi.Create(Constants.UdiEntityType.Document, new Guid("74ECA1D4-934E-436A-A7C7-36CC16D4095C")).ToString()); + content.SetValue("mediaPicker", Udi.Create(Constants.UdiEntityType.Media, new Guid("44CB39C8-01E5-45EB-9CF8-E70AAF2D1691")).ToString()); + content.SetValue("memberPicker", Udi.Create(Constants.UdiEntityType.Member, new Guid("9A50A448-59C0-4D42-8F93-4F1D55B0F47D")).ToString()); + content.SetValue("multiUrlPicker", "[{\"name\":\"https://test.com\",\"url\":\"https://test.com\"}]"); + content.SetValue("tags", "this,is,tags"); + + return content; + } + int? IWithIdBuilder.Id { get => _id; diff --git a/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs index a4d940f460..f95577a5ef 100644 --- a/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs @@ -154,7 +154,7 @@ namespace Umbraco.Tests.Common.Builders .WithAlias(RandomAlias("bodyText", randomizeAliases)) .WithName("Body text") .WithSortOrder(2) - .WithDataTypeId(-87) + .WithDataTypeId(Constants.DataTypes.RichtextEditor) .WithMandatory(mandatoryProperties) .Done() .AddPropertyType() @@ -173,6 +173,23 @@ namespace Umbraco.Tests.Common.Builders .Build(); } + public static ContentType CreateSimpleTagsContentType(string alias, string name, IContentType parent = null, bool randomizeAliases = false, string propertyGroupName = "Content", int defaultTemplateId = 1) + { + var contentType = CreateSimpleContentType(alias, name, parent, randomizeAliases, propertyGroupName, defaultTemplateId: defaultTemplateId); + + var propertyType = new PropertyTypeBuilder() + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Tags) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithAlias(RandomAlias("tags", randomizeAliases)) + .WithName("Tags") + .WithDataTypeId(Constants.DataTypes.Tags) + .WithSortOrder(99) + .Build(); + contentType.AddPropertyType(propertyType); + + return contentType; + } + public static ContentType CreateTextPageContentType(string alias = "textPage", string name = "Text Page", int defaultTemplateId = 1) { var builder = new ContentTypeBuilder(); @@ -195,7 +212,7 @@ namespace Umbraco.Tests.Common.Builders .WithAlias("bodyText") .WithName("Body text") .WithSortOrder(2) - .WithDataTypeId(-87) + .WithDataTypeId(Constants.DataTypes.RichtextEditor) .Done() .Done() .AddPropertyGroup() @@ -268,6 +285,171 @@ namespace Umbraco.Tests.Common.Builders .Build(); } + public static ContentType CreateAllTypesContentType(string alias, string name) + { + var builder = new ContentTypeBuilder(); + return (ContentType)builder + .WithAlias(alias) + .WithName(name) + .AddPropertyGroup() + .WithName("Content") + .WithSupportsPublishing(true) + .AddPropertyType() + .WithAlias("isTrue") + .WithName("Is True or False") + .WithDataTypeId(Constants.DataTypes.Boolean) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Boolean) + .WithValueStorageType(ValueStorageType.Integer) + .WithSortOrder(1) + .Done() + .AddPropertyType() + .WithAlias("number") + .WithName("Number") + .WithDataTypeId(-51) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Integer) + .WithValueStorageType(ValueStorageType.Integer) + .WithSortOrder(2) + .Done() + .AddPropertyType() + .WithAlias("bodyText") + .WithName("Body Text") + .WithDataTypeId(Constants.DataTypes.RichtextEditor) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.TinyMce) + .WithValueStorageType(ValueStorageType.Ntext) + .WithSortOrder(3) + .Done() + .AddPropertyType() + .WithAlias("singleLineText") + .WithName("Text String") + .WithDataTypeId(Constants.DataTypes.Textbox) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.TextBox) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(4) + .Done() + .AddPropertyType() + .WithAlias("multilineText") + .WithName("Multiple Text Strings") + .WithDataTypeId(Constants.DataTypes.Textarea) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.TextArea) + .WithValueStorageType(ValueStorageType.Ntext) + .WithSortOrder(5) + .Done() + .AddPropertyType() + .WithAlias("upload") + .WithName("Upload Field") + .WithDataTypeId(Constants.DataTypes.Upload) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.UploadField) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(6) + .Done() + .AddPropertyType() + .WithAlias("label") + .WithName("Label") + .WithDataTypeId(Constants.DataTypes.LabelString) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Label) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(7) + .Done() + .AddPropertyType() + .WithAlias("dateTime") + .WithName("Date Time") + .WithDataTypeId(Constants.DataTypes.DateTime) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.DateTime) + .WithValueStorageType(ValueStorageType.Date) + .WithSortOrder(8) + .Done() + .AddPropertyType() + .WithAlias("colorPicker") + .WithName("Color Picker") + .WithDataTypeId(-37) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.ColorPicker) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(9) + .Done() + .AddPropertyType() + .WithAlias("ddlMultiple") + .WithName("Dropdown List Multiple") + .WithDataTypeId(Constants.DataTypes.DropDownMultiple) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.DropDownListFlexible) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(11) + .Done() + .AddPropertyType() + .WithAlias("rbList") + .WithName("Radio Button List") + .WithDataTypeId(-40) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.RadioButtonList) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(12) + .Done() + .AddPropertyType() + .WithAlias("date") + .WithName("Date") + .WithDataTypeId(-36) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.DateTime) + .WithValueStorageType(ValueStorageType.Date) + .WithSortOrder(13) + .Done() + .AddPropertyType() + .WithAlias("ddl") + .WithName("Dropdown List") + .WithDataTypeId(Constants.DataTypes.DropDownSingle) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.DropDownListFlexible) + .WithValueStorageType(ValueStorageType.Integer) + .WithSortOrder(14) + .Done() + .AddPropertyType() + .WithAlias("chklist") + .WithName("Checkbox List") + .WithDataTypeId(-43) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.CheckBoxList) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(15) + .Done() + .AddPropertyType() + .WithAlias("contentPicker") + .WithName("Content Picker") + .WithDataTypeId(1046) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.ContentPicker) + .WithValueStorageType(ValueStorageType.Integer) + .WithSortOrder(16) + .Done() + .AddPropertyType() + .WithAlias("mediaPicker") + .WithName("Media Picker") + .WithDataTypeId(1048) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.MediaPicker) + .WithValueStorageType(ValueStorageType.Integer) + .WithSortOrder(17) + .Done() + .AddPropertyType() + .WithAlias("memberPicker") + .WithName("Member Picker") + .WithDataTypeId(1047) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.MemberPicker) + .WithValueStorageType(ValueStorageType.Integer) + .WithSortOrder(18) + .Done() + .AddPropertyType() + .WithAlias("multiUrlPicker") + .WithName("Multi URL Picker") + .WithDataTypeId(1050) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.MultiUrlPicker) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithSortOrder(19) + .Done() + .AddPropertyType() + .WithAlias("tags") + .WithName("Tags") + .WithDataTypeId(Constants.DataTypes.Tags) + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Tags) + .WithValueStorageType(ValueStorageType.Ntext) + .WithSortOrder(20) + .Done() + .Done() + .Build(); + } + int? IWithPropertyTypeIdsIncrementingFrom.PropertyTypeIdsIncrementingFrom { get => _propertyTypeIdsIncrementingFrom; diff --git a/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs b/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs index eb9eaf94c4..066ed18ba8 100644 --- a/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs +++ b/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs @@ -37,10 +37,7 @@ namespace Umbraco.Tests.Integration.Persistence.Repositories [SetUp] public void SetUp() { - var testHelper = new TestHelper(); - _fileSystems = Mock.Of(); - var viewsFileSystem = new PhysicalFileSystem(IOHelper, testHelper.GetHostingEnvironment(), LoggerFactory.CreateLogger(), Constants.SystemDirectories.MvcViews); - Mock.Get(_fileSystems).Setup(x => x.MvcViewsFileSystem).Returns(viewsFileSystem); + _fileSystems = GetMockFileSystems(); } [Test] diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests.Integration/Services/ContentServiceTests.cs similarity index 67% rename from src/Umbraco.Tests/Services/ContentServiceTests.cs rename to src/Umbraco.Tests.Integration/Services/ContentServiceTests.cs index e37c080d7d..26f6a8c720 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/ContentServiceTests.cs @@ -10,8 +10,9 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Events; +using Umbraco.Core.IO; using Umbraco.Core.Models; -using Umbraco.Core.Models.Membership; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.PropertyEditors; @@ -19,16 +20,14 @@ using Umbraco.Core.Scoping; using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.LegacyXmlPublishedCache; -using Umbraco.Tests.TestHelpers.Entities; +using Umbraco.Tests.Common.Builders.Extensions; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Services +namespace Umbraco.Tests.Integration.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] [Category("Slow")] @@ -36,18 +35,29 @@ namespace Umbraco.Tests.Services PublishedRepositoryEvents = true, WithApplication = true, Logger = UmbracoTestOptions.Logger.Console)] - public class ContentServiceTests : TestWithSomeContentBase + public class ContentServiceTests : UmbracoIntegrationTestWithContent { // TODO: Add test to verify there is only ONE newest document/content in {Constants.DatabaseSchema.Tables.Document} table after updating. // TODO: Add test to delete specific version (with and without deleting prior versions) and versions by date. - private GlobalSettings _globalSettings; + private IMediaTypeService MediaTypeService => GetRequiredService(); + private MediaService MediaService => (MediaService)GetRequiredService(); + private IDataTypeService DataTypeService => GetRequiredService(); + private ILocalizationService LocalizationService => GetRequiredService(); + private IAuditService AuditService => GetRequiredService(); + private IUserService UserService => GetRequiredService(); + private IRelationService RelationService => GetRequiredService(); + private ILocalizedTextService TextService => GetRequiredService(); + private ITagService TagService => GetRequiredService(); + private IPublicAccessService PublicAccessService => GetRequiredService(); + private IDomainService DomainService => GetRequiredService(); + private INotificationService NotificationService => GetRequiredService(); + private PropertyEditorCollection PropertyEditorCollection => GetRequiredService(); - public override void SetUp() + public override void Setup() { - base.SetUp(); + base.Setup(); ContentRepositoryBase.ThrowOnWarning = true; - _globalSettings = new GlobalSettings(); } public override void TearDown() @@ -56,60 +66,52 @@ namespace Umbraco.Tests.Services base.TearDown(); } - protected override void Compose() - { - base.Compose(); - - Composition.RegisterUnique(factory => Mock.Of()); - } - [Test] public void Create_Blueprint() { - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); - var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - contentTypeService.Save(contentType); + var contentType = ContentTypeBuilder.CreateTextPageContentType(defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); - var blueprint = MockedContent.CreateTextpageContent(contentType, "hello", Constants.System.Root); + var blueprint = ContentBuilder.CreateTextpageContent(contentType, "hello", Constants.System.Root); blueprint.SetValue("title", "blueprint 1"); blueprint.SetValue("bodyText", "blueprint 2"); blueprint.SetValue("keywords", "blueprint 3"); blueprint.SetValue("description", "blueprint 4"); - contentService.SaveBlueprint(blueprint); + ContentService.SaveBlueprint(blueprint); - var found = contentService.GetBlueprintsForContentTypes().ToArray(); + var found = ContentService.GetBlueprintsForContentTypes().ToArray(); Assert.AreEqual(1, found.Length); //ensures it's not found by normal content - var contentFound = contentService.GetById(found[0].Id); + var contentFound = ContentService.GetById(found[0].Id); Assert.IsNull(contentFound); } [Test] public void Delete_Blueprint() { - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); - var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - contentTypeService.Save(contentType); + var contentType = ContentTypeBuilder.CreateTextPageContentType(defaultTemplateId: template.Id); + FileService.SaveTemplate(contentType.DefaultTemplate); + ContentTypeService.Save(contentType); - var blueprint = MockedContent.CreateTextpageContent(contentType, "hello", Constants.System.Root); + var blueprint = ContentBuilder.CreateTextpageContent(contentType, "hello", Constants.System.Root); blueprint.SetValue("title", "blueprint 1"); blueprint.SetValue("bodyText", "blueprint 2"); blueprint.SetValue("keywords", "blueprint 3"); blueprint.SetValue("description", "blueprint 4"); - contentService.SaveBlueprint(blueprint); + ContentService.SaveBlueprint(blueprint); - contentService.DeleteBlueprint(blueprint); + ContentService.DeleteBlueprint(blueprint); - var found = contentService.GetBlueprintsForContentTypes().ToArray(); + var found = ContentService.GetBlueprintsForContentTypes().ToArray(); Assert.AreEqual(0, found.Length); } @@ -118,23 +120,23 @@ namespace Umbraco.Tests.Services { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); - var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - contentTypeService.Save(contentType); + var contentType = ContentTypeBuilder.CreateTextPageContentType(defaultTemplateId: template.Id); + FileService.SaveTemplate(contentType.DefaultTemplate); + ContentTypeService.Save(contentType); - var blueprint = MockedContent.CreateTextpageContent(contentType, "hello", Constants.System.Root); + var blueprint = ContentBuilder.CreateTextpageContent(contentType, "hello", Constants.System.Root); blueprint.SetValue("title", "blueprint 1"); blueprint.SetValue("bodyText", "blueprint 2"); blueprint.SetValue("keywords", "blueprint 3"); blueprint.SetValue("description", "blueprint 4"); - contentService.SaveBlueprint(blueprint); + ContentService.SaveBlueprint(blueprint); - var fromBlueprint = contentService.CreateContentFromBlueprint(blueprint, "hello world"); - contentService.Save(fromBlueprint); + var fromBlueprint = ContentService.CreateContentFromBlueprint(blueprint, "hello world"); + ContentService.Save(fromBlueprint); Assert.IsTrue(fromBlueprint.HasIdentity); Assert.AreEqual("blueprint 1", fromBlueprint.Properties["title"].GetValue()); @@ -148,47 +150,52 @@ namespace Umbraco.Tests.Services [Test] public void Get_All_Blueprints() { - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); - var ct1 = MockedContentTypes.CreateTextPageContentType("ct1"); - ServiceContext.FileService.SaveTemplate(ct1.DefaultTemplate); - contentTypeService.Save(ct1); - var ct2 = MockedContentTypes.CreateTextPageContentType("ct2"); - ServiceContext.FileService.SaveTemplate(ct2.DefaultTemplate); - contentTypeService.Save(ct2); + var ct1 = ContentTypeBuilder.CreateTextPageContentType("ct1", defaultTemplateId: template.Id); + FileService.SaveTemplate(ct1.DefaultTemplate); + ContentTypeService.Save(ct1); + var ct2 = ContentTypeBuilder.CreateTextPageContentType("ct2", defaultTemplateId: template.Id); + FileService.SaveTemplate(ct2.DefaultTemplate); + ContentTypeService.Save(ct2); for (int i = 0; i < 10; i++) { - var blueprint = MockedContent.CreateTextpageContent(i % 2 == 0 ? ct1 : ct2, "hello" + i, Constants.System.Root); - contentService.SaveBlueprint(blueprint); + var blueprint = ContentBuilder.CreateTextpageContent(i % 2 == 0 ? ct1 : ct2, "hello" + i, Constants.System.Root); + ContentService.SaveBlueprint(blueprint); } - var found = contentService.GetBlueprintsForContentTypes().ToArray(); + var found = ContentService.GetBlueprintsForContentTypes().ToArray(); Assert.AreEqual(10, found.Length); - found = contentService.GetBlueprintsForContentTypes(ct1.Id).ToArray(); + found = ContentService.GetBlueprintsForContentTypes(ct1.Id).ToArray(); Assert.AreEqual(5, found.Length); - found = contentService.GetBlueprintsForContentTypes(ct2.Id).ToArray(); + found = ContentService.GetBlueprintsForContentTypes(ct2.Id).ToArray(); Assert.AreEqual(5, found.Length); } [Test] public void Perform_Scheduled_Publishing() { - var langUk = new Language(_globalSettings, "en-GB") { IsDefault = true }; - var langFr = new Language(_globalSettings, "fr-FR"); + var langUk = new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); - ServiceContext.LocalizationService.Save(langFr); - ServiceContext.LocalizationService.Save(langUk); + LocalizationService.Save(langFr); + LocalizationService.Save(langUk); - var ctInvariant = MockedContentTypes.CreateBasicContentType("invariantPage"); - ServiceContext.ContentTypeService.Save(ctInvariant); + var ctInvariant = ContentTypeBuilder.CreateBasicContentType("invariantPage"); + ContentTypeService.Save(ctInvariant); - var ctVariant = MockedContentTypes.CreateBasicContentType("variantPage"); + var ctVariant = ContentTypeBuilder.CreateBasicContentType("variantPage"); ctVariant.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(ctVariant); + ContentTypeService.Save(ctVariant); var now = DateTime.Now; @@ -196,18 +203,18 @@ namespace Umbraco.Tests.Services var invariant = new List(); for (var i = 0; i < 10; i++) { - var c = MockedContent.CreateBasicContent(ctInvariant); + var c = ContentBuilder.CreateBasicContent(ctInvariant); c.Name = "name" + i; if (i % 2 == 0) { c.ContentSchedule.Add(now.AddSeconds(5), null); //release in 5 seconds - var r = ServiceContext.ContentService.Save(c); + var r = ContentService.Save(c); Assert.IsTrue(r.Success, r.Result.ToString()); } else { c.ContentSchedule.Add(null, now.AddSeconds(5)); //expire in 5 seconds - var r = ServiceContext.ContentService.SaveAndPublish(c); + var r = ContentService.SaveAndPublish(c); Assert.IsTrue(r.Success, r.Result.ToString()); } invariant.Add(c); @@ -218,14 +225,14 @@ namespace Umbraco.Tests.Services var alternatingCulture = langFr.IsoCode; for (var i = 0; i < 10; i++) { - var c = MockedContent.CreateBasicContent(ctVariant); + var c = ContentBuilder.CreateBasicContent(ctVariant); c.SetCultureName("name-uk" + i, langUk.IsoCode); c.SetCultureName("name-fr" + i, langFr.IsoCode); if (i % 2 == 0) { c.ContentSchedule.Add(alternatingCulture, now.AddSeconds(5), null); //release in 5 seconds - var r = ServiceContext.ContentService.Save(c); + var r = ContentService.Save(c); Assert.IsTrue(r.Success, r.Result.ToString()); alternatingCulture = alternatingCulture == langFr.IsoCode ? langUk.IsoCode : langFr.IsoCode; @@ -233,14 +240,14 @@ namespace Umbraco.Tests.Services else { c.ContentSchedule.Add(alternatingCulture, null, now.AddSeconds(5)); //expire in 5 seconds - var r = ServiceContext.ContentService.SaveAndPublish(c); + var r = ContentService.SaveAndPublish(c); Assert.IsTrue(r.Success, r.Result.ToString()); } variant.Add(c); } - var runSched = ServiceContext.ContentService.PerformScheduledPublish( + var runSched = ContentService.PerformScheduledPublish( now.AddMinutes(1)).ToList(); //process anything scheduled before a minute from now //this is 21 because the test data installed before this test runs has a scheduled item! @@ -258,7 +265,7 @@ namespace Umbraco.Tests.Services string.Join(Environment.NewLine, runSched.Select(x => $"{x.Entity.Name} - {x.Result}"))); //re-run the scheduled publishing, there should be no results - runSched = ServiceContext.ContentService.PerformScheduledPublish( + runSched = ContentService.PerformScheduledPublish( now.AddMinutes(1)).ToList(); Assert.AreEqual(0, runSched.Count); @@ -268,49 +275,46 @@ namespace Umbraco.Tests.Services public void Remove_Scheduled_Publishing_Date() { // Arrange - var contentService = ServiceContext.ContentService; // Act - var content = contentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); + var content = ContentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); content.ContentSchedule.Add(null, DateTime.Now.AddHours(2)); - contentService.Save(content, Constants.Security.SuperUserId); + ContentService.Save(content, Constants.Security.SuperUserId); Assert.AreEqual(1, content.ContentSchedule.FullSchedule.Count); - content = contentService.GetById(content.Id); + content = ContentService.GetById(content.Id); var sched = content.ContentSchedule.FullSchedule; Assert.AreEqual(1, sched.Count); Assert.AreEqual(1, sched.Count(x => x.Culture == string.Empty)); content.ContentSchedule.Clear(ContentScheduleAction.Expire); - contentService.Save(content, Constants.Security.SuperUserId); + ContentService.Save(content, Constants.Security.SuperUserId); // Assert - content = contentService.GetById(content.Id); + content = ContentService.GetById(content.Id); sched = content.ContentSchedule.FullSchedule; Assert.AreEqual(0, sched.Count); - Assert.IsTrue(contentService.SaveAndPublish(content).Success); + Assert.IsTrue(ContentService.SaveAndPublish(content).Success); } [Test] public void Get_Top_Version_Ids() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var content = contentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); + var content = ContentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); for (var i = 0; i < 20; i++) { content.SetValue("bodyText", "hello world " + Guid.NewGuid()); - contentService.SaveAndPublish(content); + ContentService.SaveAndPublish(content); } // Assert - var allVersions = contentService.GetVersionIds(content.Id, int.MaxValue); + var allVersions = ContentService.GetVersionIds(content.Id, int.MaxValue); Assert.AreEqual(21, allVersions.Count()); - var topVersions = contentService.GetVersionIds(content.Id, 4); + var topVersions = ContentService.GetVersionIds(content.Id, 4); Assert.AreEqual(4, topVersions.Count()); } @@ -318,16 +322,14 @@ namespace Umbraco.Tests.Services public void Get_By_Ids_Sorted() { // Arrange - var contentService = ServiceContext.ContentService; - // Act var results = new List(); for (var i = 0; i < 20; i++) { - results.Add(contentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", 0)); + results.Add(ContentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", 0)); } - var sortedGet = contentService.GetByIds(new[] {results[10].Id, results[5].Id, results[12].Id}).ToArray(); + var sortedGet = ContentService.GetByIds(new[] {results[10].Id, results[5].Id, results[12].Id}).ToArray(); // Assert Assert.AreEqual(sortedGet[0].Id, results[10].Id); @@ -339,87 +341,86 @@ namespace Umbraco.Tests.Services public void Count_All() { // Arrange - var contentService = ServiceContext.ContentService; - // Act for (int i = 0; i < 20; i++) { - contentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); + ContentService.CreateAndSave("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); } // Assert - Assert.AreEqual(24, contentService.Count()); + Assert.AreEqual(24, ContentService.Count()); } [Test] public void Count_By_Content_Type() { // Arrange - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = MockedContentTypes.CreateSimpleContentType("umbBlah", "test Doc Type"); - contentTypeService.Save(contentType); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbBlah", "test Doc Type", defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); // Act - for (int i = 0; i < 20; i++) + for (var i = 0; i < 20; i++) { - contentService.CreateAndSave("Test", Constants.System.Root, "umbBlah", Constants.Security.SuperUserId); + ContentService.CreateAndSave("Test", Constants.System.Root, "umbBlah", Constants.Security.SuperUserId); } // Assert - Assert.AreEqual(20, contentService.Count(documentTypeAlias: "umbBlah")); + Assert.AreEqual(20, ContentService.Count(contentTypeAlias: "umbBlah")); } [Test] public void Count_Children() { // Arrange - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = MockedContentTypes.CreateSimpleContentType("umbBlah", "test Doc Type"); - contentTypeService.Save(contentType); - var parent = contentService.CreateAndSave("Test", Constants.System.Root, "umbBlah", Constants.Security.SuperUserId); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbBlah", "test Doc Type", defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); + var parent = ContentService.CreateAndSave("Test", Constants.System.Root, "umbBlah", Constants.Security.SuperUserId); // Act for (int i = 0; i < 20; i++) { - contentService.CreateAndSave("Test", parent, "umbBlah"); + ContentService.CreateAndSave("Test", parent, "umbBlah"); } // Assert - Assert.AreEqual(20, contentService.CountChildren(parent.Id)); + Assert.AreEqual(20, ContentService.CountChildren(parent.Id)); } [Test] public void Count_Descendants() { // Arrange - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = MockedContentTypes.CreateSimpleContentType("umbBlah", "test Doc Type"); - contentTypeService.Save(contentType); - var parent = contentService.CreateAndSave("Test", Constants.System.Root, "umbBlah", Constants.Security.SuperUserId); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbBlah", "test Doc Type", defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); + var parent = ContentService.CreateAndSave("Test", Constants.System.Root, "umbBlah", Constants.Security.SuperUserId); // Act IContent current = parent; for (int i = 0; i < 20; i++) { - current = contentService.CreateAndSave("Test", current, "umbBlah"); + current = ContentService.CreateAndSave("Test", current, "umbBlah"); } // Assert - Assert.AreEqual(20, contentService.CountDescendants(parent.Id)); + Assert.AreEqual(20, ContentService.CountDescendants(parent.Id)); } [Test] public void GetAncestors_Returns_Empty_List_When_Path_Is_Null() { // Arrange - var contentService = ServiceContext.ContentService; - // Act var current = new Mock(); - var res = contentService.GetAncestors(current.Object); + var res = ContentService.GetAncestors(current.Object); // Assert Assert.IsEmpty(res); @@ -429,10 +430,8 @@ namespace Umbraco.Tests.Services public void Can_Remove_Property_Type() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var content = contentService.Create("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); + var content = ContentService.Create("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); // Assert Assert.That(content, Is.Not.Null); @@ -443,10 +442,8 @@ namespace Umbraco.Tests.Services public void Can_Create_Content() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var content = contentService.Create("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); + var content = ContentService.Create("Test", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); // Assert Assert.That(content, Is.Not.Null); @@ -456,22 +453,25 @@ namespace Umbraco.Tests.Services [Test] public void Automatically_Track_Relations() { - var mt = MockedContentTypes.CreateSimpleMediaType("testMediaType", "Test Media Type"); - ServiceContext.MediaTypeService.Save(mt); - var m1 = MockedMedia.CreateSimpleMedia(mt, "hello 1", -1); - var m2 = MockedMedia.CreateSimpleMedia(mt, "hello 1", -1); - ServiceContext.MediaService.Save(m1); - ServiceContext.MediaService.Save(m2); + var mt = MediaTypeBuilder.CreateSimpleMediaType("testMediaType", "Test Media Type"); + MediaTypeService.Save(mt); + var m1 = MediaBuilder.CreateSimpleMedia(mt, "hello 1", -1); + var m2 = MediaBuilder.CreateSimpleMedia(mt, "hello 1", -1); + MediaService.Save(m1); + MediaService.Save(m2); - var ct = MockedContentTypes.CreateTextPageContentType("richTextTest"); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var ct = ContentTypeBuilder.CreateTextPageContentType("richTextTest", defaultTemplateId: template.Id); ct.AllowedTemplates = Enumerable.Empty(); - ServiceContext.ContentTypeService.Save(ct); + ContentTypeService.Save(ct); - var c1 = MockedContent.CreateTextpageContent(ct, "my content 1", -1); - ServiceContext.ContentService.Save(c1); + var c1 = ContentBuilder.CreateTextpageContent(ct, "my content 1", -1); + ContentService.Save(c1); - var c2 = MockedContent.CreateTextpageContent(ct, "my content 2", -1); + var c2 = ContentBuilder.CreateTextpageContent(ct, "my content 2", -1); //'bodyText' is a property with a RTE property editor which we knows tracks relations c2.Properties["bodyText"].SetValue(@"

@@ -482,9 +482,9 @@ namespace Umbraco.Tests.Services hello

"); - ServiceContext.ContentService.Save(c2); + ContentService.Save(c2); - var relations = ServiceContext.RelationService.GetByParentId(c2.Id).ToList(); + var relations = RelationService.GetByParentId(c2.Id).ToList(); Assert.AreEqual(3, relations.Count); Assert.AreEqual(Constants.Conventions.RelationTypes.RelatedMediaAlias, relations[0].RelationType.Alias); Assert.AreEqual(m1.Id, relations[0].ChildId); @@ -498,10 +498,8 @@ namespace Umbraco.Tests.Services public void Can_Create_Content_Without_Explicitly_Set_User() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var content = contentService.Create("Test", Constants.System.Root, "umbTextpage"); + var content = ContentService.Create("Test", Constants.System.Root, "umbTextpage"); // Assert Assert.That(content, Is.Not.Null); @@ -512,18 +510,12 @@ namespace Umbraco.Tests.Services [Test] public void Can_Save_New_Content_With_Explicit_User() { - var user = new User(_globalSettings) - { - Name = "Test", - Email = "test@test.com", - Username = "test", - RawPasswordValue = "test" - }; - ServiceContext.UserService.Save(user); - var content = new Content("Test", Constants.System.Root, ServiceContext.ContentTypeService.Get("umbTextpage")); + var user = new UserBuilder().Build(); + UserService.Save(user); + var content = new Content("Test", Constants.System.Root, ContentTypeService.Get("umbTextpage")); // Act - ServiceContext.ContentService.Save(content, (int)user.Id); + ContentService.Save(content, user.Id); // Assert Assert.That(content.CreatorId, Is.EqualTo(user.Id)); @@ -534,59 +526,50 @@ namespace Umbraco.Tests.Services public void Cannot_Create_Content_With_Non_Existing_ContentType_Alias() { // Arrange - var contentService = ServiceContext.ContentService; - // Act & Assert - Assert.Throws(() => contentService.Create("Test", Constants.System.Root, "umbAliasDoesntExist")); + Assert.Throws(() => ContentService.Create("Test", Constants.System.Root, "umbAliasDoesntExist")); } [Test] public void Cannot_Save_Content_With_Empty_Name() { // Arrange - var contentService = ServiceContext.ContentService; - var content = new Content(string.Empty, Constants.System.Root, ServiceContext.ContentTypeService.Get("umbTextpage")); + var content = new Content(string.Empty, Constants.System.Root, ContentTypeService.Get("umbTextpage")); // Act & Assert - Assert.Throws(() => contentService.Save(content)); + Assert.Throws(() => ContentService.Save(content)); } [Test] public void Can_Get_Content_By_Id() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var content = contentService.GetById(NodeDto.NodeIdSeed + 2 ); + var content = ContentService.GetById(NodeIdSeed + 3); // Assert Assert.That(content, Is.Not.Null); - Assert.That(content.Id, Is.EqualTo(NodeDto.NodeIdSeed + 2)); + Assert.That(content.Id, Is.EqualTo(NodeIdSeed + 3)); } [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")); + 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 + 2)); + Assert.That(content.Id, Is.EqualTo(NodeIdSeed + 3)); } [Test] public void Can_Get_Content_By_Level() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var contents = contentService.GetByLevel(2).ToList(); + var contents = ContentService.GetByLevel(2).ToList(); // Assert Assert.That(contents, Is.Not.Null); @@ -597,15 +580,13 @@ namespace Umbraco.Tests.Services [Test] public void Can_Get_All_Versions_Of_Content() { - var contentService = ServiceContext.ContentService; - - var parent = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 2); + var parent = ContentService.GetById(NodeIdSeed + 3); Assert.IsFalse(parent.Published); - ServiceContext.ContentService.SaveAndPublish(parent); // publishing parent, so Text Page 2 can be updated. + ContentService.SaveAndPublish(parent); // publishing parent, so Text Page 2 can be updated. - var content = contentService.GetById(NodeDto.NodeIdSeed + 4); + var content = ContentService.GetById(NodeIdSeed + 4); Assert.IsFalse(content.Published); - var versions = contentService.GetVersions(NodeDto.NodeIdSeed + 4).ToList(); + var versions = ContentService.GetVersions(NodeIdSeed + 4).ToList(); Assert.AreEqual(1, versions.Count); var version1 = content.VersionId; @@ -613,31 +594,31 @@ namespace Umbraco.Tests.Services content.Name = "Text Page 2 Updated"; content.SetValue("author", "Jane Doe"); - contentService.SaveAndPublish(content); // publishes the current version, creates a version + ContentService.SaveAndPublish(content); // publishes the current version, creates a version var version2 = content.VersionId; Console.WriteLine($"2 e={content.VersionId} p={content.PublishedVersionId}"); content.Name = "Text Page 2 ReUpdated"; content.SetValue("author", "Bob Hope"); - contentService.SaveAndPublish(content); // publishes again, creates a version + ContentService.SaveAndPublish(content); // publishes again, creates a version var version3 = content.VersionId; Console.WriteLine($"3 e={content.VersionId} p={content.PublishedVersionId}"); - var content1 = contentService.GetById(content.Id); + var content1 = ContentService.GetById(content.Id); Assert.AreEqual("Bob Hope", content1.GetValue("author")); Assert.AreEqual("Bob Hope", content1.GetValue("author", published: true)); content.Name = "Text Page 2 ReReUpdated"; content.SetValue("author", "John Farr"); - contentService.Save(content); // no new version + ContentService.Save(content); // no new version - content1 = contentService.GetById(content.Id); + content1 = ContentService.GetById(content.Id); Assert.AreEqual("John Farr", content1.GetValue("author")); Assert.AreEqual("Bob Hope", content1.GetValue("author", published: true)); - versions = contentService.GetVersions(NodeDto.NodeIdSeed + 4).ToList(); + versions = ContentService.GetVersions(NodeIdSeed + 4).ToList(); Assert.AreEqual(3, versions.Count); // versions come with most recent first @@ -669,10 +650,8 @@ namespace Umbraco.Tests.Services public void Can_Get_Root_Content() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var contents = contentService.GetRootContent().ToList(); + var contents = ContentService.GetRootContent().ToList(); // Assert Assert.That(contents, Is.Not.Null); @@ -684,16 +663,15 @@ namespace Umbraco.Tests.Services public void Can_Get_Content_For_Expiration() { // Arrange - var contentService = ServiceContext.ContentService; - var root = contentService.GetById(NodeDto.NodeIdSeed + 2); - contentService.SaveAndPublish(root); - var content = contentService.GetById(NodeDto.NodeIdSeed + 4); + var root = ContentService.GetById(NodeIdSeed + 3); + ContentService.SaveAndPublish(root); + var content = ContentService.GetById(NodeIdSeed + 4); content.ContentSchedule.Add(null, DateTime.Now.AddSeconds(1)); - contentService.SaveAndPublish(content); + ContentService.SaveAndPublish(content); // Act Thread.Sleep(new TimeSpan(0, 0, 0, 2)); - var contents = contentService.GetContentForExpiration(DateTime.Now).ToList(); + var contents = ContentService.GetContentForExpiration(DateTime.Now).ToList(); // Assert Assert.That(contents, Is.Not.Null); @@ -705,10 +683,8 @@ namespace Umbraco.Tests.Services public void Can_Get_Content_For_Release() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var contents = contentService.GetContentForRelease(DateTime.Now).ToList(); + var contents = ContentService.GetContentForRelease(DateTime.Now).ToList(); // Assert Assert.That(DateTime.Now.AddMinutes(-5) <= DateTime.Now); @@ -721,10 +697,8 @@ namespace Umbraco.Tests.Services public void Can_Get_Content_In_RecycleBin() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - var contents = contentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); + var contents = ContentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); // Assert Assert.That(contents, Is.Not.Null); @@ -736,28 +710,17 @@ namespace Umbraco.Tests.Services public void Can_Unpublish_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 2); - var published = contentService.SaveAndPublish(content, userId: 0); - - using (var scope = ScopeProvider.CreateScope()) - { - Assert.IsTrue(scope.Database.Exists(content.Id)); - } + var content = ContentService.GetById(NodeIdSeed + 3); + var published = ContentService.SaveAndPublish(content, userId: 0); // Act - var unpublished = contentService.Unpublish(content, userId: 0); + var unpublished = ContentService.Unpublish(content, userId: 0); // Assert Assert.That(published.Success, Is.True); Assert.That(unpublished.Success, Is.True); Assert.That(content.Published, Is.False); Assert.AreEqual(PublishResultType.SuccessUnpublish, unpublished.Result); - - using (var scope = ScopeProvider.CreateScope()) - { - Assert.IsFalse(scope.Database.Exists(content.Id)); - } } [Test] @@ -770,24 +733,24 @@ namespace Umbraco.Tests.Services Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); - var published = ServiceContext.ContentService.SaveAndPublish(content, new[]{ langFr.IsoCode , langUk.IsoCode }); + var published = ContentService.SaveAndPublish(content, new[]{ langFr.IsoCode , langUk.IsoCode }); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsTrue(published.Success); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); - var unpublished = ServiceContext.ContentService.Unpublish(content, langFr.IsoCode); + var unpublished = ContentService.Unpublish(content, langFr.IsoCode); Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishCulture, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); @@ -799,34 +762,34 @@ namespace Umbraco.Tests.Services { var content = CreateEnglishAndFrenchDocument(out var langUk, out var langFr, out var contentType); - var published = ServiceContext.ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); + var published = ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); Assert.AreEqual(PublishedState.Published, content.PublishedState); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); - var unpublished = ServiceContext.ContentService.Unpublish(content, langUk.IsoCode); //first culture + var unpublished = ContentService.Unpublish(content, langUk.IsoCode); //first culture Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishCulture, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langUk.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); - unpublished = ServiceContext.ContentService.Unpublish(content, langFr.IsoCode); //last culture + unpublished = ContentService.Unpublish(content, langFr.IsoCode); //last culture Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishLastCulture, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); Assert.IsFalse(content.IsCulturePublished(langUk.IsoCode)); - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); - published = ServiceContext.ContentService.SaveAndPublish(content, langUk.IsoCode); + published = ContentService.SaveAndPublish(content, langUk.IsoCode); Assert.AreEqual(PublishedState.Published, content.PublishedState); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); - content = ServiceContext.ContentService.GetById(content.Id); //reget + content = ContentService.GetById(content.Id); //reget Assert.AreEqual(PublishedState.Published, content.PublishedState); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); @@ -840,19 +803,19 @@ namespace Umbraco.Tests.Services { var content = CreateEnglishAndFrenchDocument(out var langUk, out var langFr, out var contentType); - var published = ServiceContext.ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); + var published = ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); Assert.IsTrue(published.Success); Assert.AreEqual(PublishedState.Published, content.PublishedState); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); Assert.AreEqual(PublishedState.Published, content.PublishedState); - var unpublished = ServiceContext.ContentService.Unpublish(content, langFr.IsoCode); //first culture + var unpublished = ContentService.Unpublish(content, langFr.IsoCode); //first culture Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishCulture, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); @@ -860,11 +823,11 @@ namespace Umbraco.Tests.Services Assert.AreEqual(PublishedState.Published, content.PublishedState); //still published //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); - unpublished = ServiceContext.ContentService.Unpublish(content, langUk.IsoCode); //last culture + unpublished = ContentService.Unpublish(content, langUk.IsoCode); //last culture Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishLastCulture, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); @@ -872,7 +835,7 @@ namespace Umbraco.Tests.Services Assert.AreEqual(PublishedState.Unpublished, content.PublishedState); //the last culture was unpublished so the document should also reflect this //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.AreEqual(PublishedState.Unpublished, content.PublishedState); //just double checking Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); Assert.IsFalse(content.IsCulturePublished(langUk.IsoCode)); @@ -881,30 +844,36 @@ namespace Umbraco.Tests.Services [Test] public void Unpublishing_Mandatory_Language_Unpublishes_Document() { - var langUk = new Language(_globalSettings, "en-GB") { IsDefault = true, IsMandatory = true }; - var langFr = new Language(_globalSettings, "fr-FR"); + var langUk = new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .WithIsMandatory(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); - ServiceContext.LocalizationService.Save(langFr); - ServiceContext.LocalizationService.Save(langUk); + LocalizationService.Save(langFr); + LocalizationService.Save(langUk); - var contentType = MockedContentTypes.CreateBasicContentType(); + var contentType = ContentTypeBuilder.CreateBasicContentType(); contentType.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); IContent content = new Content("content", Constants.System.Root, contentType); content.SetCultureName("content-fr", langFr.IsoCode); content.SetCultureName("content-en", langUk.IsoCode); - var published = ServiceContext.ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); + var published = ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); Assert.IsTrue(published.Success); Assert.AreEqual(PublishedState.Published, content.PublishedState); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); - var unpublished = ServiceContext.ContentService.Unpublish(content, langUk.IsoCode); //unpublish mandatory lang + var unpublished = ContentService.Unpublish(content, langUk.IsoCode); //unpublish mandatory lang Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishMandatoryCulture, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langUk.IsoCode)); @@ -917,31 +886,31 @@ namespace Umbraco.Tests.Services { var content = CreateEnglishAndFrenchDocument(out var langUk, out var langFr, out var contentType); - var published = ServiceContext.ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); + var published = ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); Assert.IsTrue(published.Success); Assert.AreEqual(PublishedState.Published, content.PublishedState); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); - var unpublished = ServiceContext.ContentService.Unpublish(content, langUk.IsoCode); + var unpublished = ContentService.Unpublish(content, langUk.IsoCode); Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishCulture, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langUk.IsoCode)); - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); //Change some data since Unpublish should always Save content.SetCultureName("content-en-updated", langUk.IsoCode); - unpublished = ServiceContext.ContentService.Unpublish(content, langUk.IsoCode); //unpublish again + unpublished = ContentService.Unpublish(content, langUk.IsoCode); //unpublish again Assert.IsTrue(unpublished.Success); Assert.AreEqual(PublishResultType.SuccessUnpublishAlready, unpublished.Result); Assert.IsFalse(content.IsCulturePublished(langUk.IsoCode)); - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); //ensure that even though the culture was already unpublished that the data was still persisted Assert.AreEqual("content-en-updated", content.GetCultureName(langUk.IsoCode)); } @@ -951,23 +920,23 @@ namespace Umbraco.Tests.Services { var content = CreateEnglishAndFrenchDocument(out var langUk, out var langFr, out var contentType); - var published = ServiceContext.ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); + var published = ContentService.SaveAndPublish(content, new[] { langFr.IsoCode, langUk.IsoCode }); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langUk.IsoCode)); Assert.IsTrue(published.Success); Assert.AreEqual(PublishedState.Published, content.PublishedState); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); //Change some data since SaveAndPublish should always Save content.SetCultureName("content-en-updated", langUk.IsoCode); - var saved = ServiceContext.ContentService.SaveAndPublish(content, new string [] { }); //save without cultures + var saved = ContentService.SaveAndPublish(content, new string [] { }); //save without cultures Assert.AreEqual(PublishResultType.FailedPublishNothingToPublish, saved.Result); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); //ensure that even though nothing was published that the data was still persisted Assert.AreEqual("content-en-updated", content.GetCultureName(langUk.IsoCode)); } @@ -977,46 +946,50 @@ namespace Umbraco.Tests.Services public void Pending_Invariant_Property_Changes_Affect_Default_Language_Edited_State() { // Arrange + var langGb = new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); - var langGB = new Language(_globalSettings, "en-GB") { IsDefault = true }; - var langFr = new Language(_globalSettings, "fr-FR"); + LocalizationService.Save(langFr); + LocalizationService.Save(langGb); - ServiceContext.LocalizationService.Save(langFr); - ServiceContext.LocalizationService.Save(langGB); - - var contentType = MockedContentTypes.CreateMetaContentType(); + var contentType = ContentTypeBuilder.CreateMetaContentType(); contentType.Variations = ContentVariation.Culture; foreach(var prop in contentType.PropertyTypes) prop.Variations = ContentVariation.Culture; var keywordsProp = contentType.PropertyTypes.Single(x => x.Alias == "metakeywords"); keywordsProp.Variations = ContentVariation.Nothing; // this one is invariant - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); IContent content = new Content("content", Constants.System.Root, contentType); - content.SetCultureName("content-en", langGB.IsoCode); + content.SetCultureName("content-en", langGb.IsoCode); content.SetCultureName("content-fr", langFr.IsoCode); - Assert.IsTrue(ServiceContext.ContentService.SaveAndPublish(content, new []{ langGB.IsoCode , langFr.IsoCode }).Success); + Assert.IsTrue(ContentService.SaveAndPublish(content, new []{ langGb.IsoCode , langFr.IsoCode }).Success); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.AreEqual(PublishedState.Published, content.PublishedState); - Assert.IsTrue(content.IsCulturePublished(langGB.IsoCode)); + Assert.IsTrue(content.IsCulturePublished(langGb.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); - Assert.IsFalse(content.IsCultureEdited(langGB.IsoCode)); + Assert.IsFalse(content.IsCultureEdited(langGb.IsoCode)); Assert.IsFalse(content.IsCultureEdited(langFr.IsoCode)); //update the invariant property and save a pending version content.SetValue("metakeywords", "hello"); - ServiceContext.ContentService.Save(content); + ContentService.Save(content); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.AreEqual(PublishedState.Published, content.PublishedState); - Assert.IsTrue(content.IsCulturePublished(langGB.IsoCode)); + Assert.IsTrue(content.IsCulturePublished(langGb.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); - Assert.IsTrue(content.IsCultureEdited(langGB.IsoCode)); + Assert.IsTrue(content.IsCultureEdited(langGb.IsoCode)); Assert.IsFalse(content.IsCultureEdited(langFr.IsoCode)); } @@ -1027,17 +1000,17 @@ namespace Umbraco.Tests.Services IContent content = new Content("content", Constants.System.Root, contentType); content.SetCultureName("content-fr", langFr.IsoCode); - var published = ServiceContext.ContentService.SaveAndPublish(content, langFr.IsoCode); + var published = ContentService.SaveAndPublish(content, langFr.IsoCode); //audit log will only show that french was published - var lastLog = ServiceContext.AuditService.GetLogs(content.Id).Last(); + var lastLog = AuditService.GetLogs(content.Id).Last(); Assert.AreEqual($"Published languages: French (France)", lastLog.Comment); //re-get - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); content.SetCultureName("content-en", langUk.IsoCode); - published = ServiceContext.ContentService.SaveAndPublish(content, langUk.IsoCode); + published = ContentService.SaveAndPublish(content, langUk.IsoCode); //audit log will only show that english was published - lastLog = ServiceContext.AuditService.GetLogs(content.Id).Last(); + lastLog = AuditService.GetLogs(content.Id).Last(); Assert.AreEqual($"Published languages: English (United Kingdom)", lastLog.Comment); } @@ -1045,36 +1018,41 @@ namespace Umbraco.Tests.Services public void Can_Unpublish_Content_Variation_And_Detect_Changed_Cultures() { // Arrange + var langGb = new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .WithIsMandatory(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); - var langGB = new Language(_globalSettings, "en-GB") { IsDefault = true, IsMandatory = true }; - var langFr = new Language(_globalSettings, "fr-FR"); + LocalizationService.Save(langFr); + LocalizationService.Save(langGb); - ServiceContext.LocalizationService.Save(langFr); - ServiceContext.LocalizationService.Save(langGB); - - var contentType = MockedContentTypes.CreateBasicContentType(); + var contentType = ContentTypeBuilder.CreateBasicContentType(); contentType.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); IContent content = new Content("content", Constants.System.Root, contentType); content.SetCultureName("content-fr", langFr.IsoCode); - content.SetCultureName("content-gb", langGB.IsoCode); - var published = ServiceContext.ContentService.SaveAndPublish(content, new[] {langGB.IsoCode, langFr.IsoCode}); + content.SetCultureName("content-gb", langGb.IsoCode); + var published = ContentService.SaveAndPublish(content, new[] {langGb.IsoCode, langFr.IsoCode}); Assert.IsTrue(published.Success); //re-get - content = ServiceContext.ContentService.GetById(content.Id); - var unpublished = ServiceContext.ContentService.Unpublish(content, langFr.IsoCode); + content = ContentService.GetById(content.Id); + var unpublished = ContentService.Unpublish(content, langFr.IsoCode); //audit log will only show that french was unpublished - var lastLog = ServiceContext.AuditService.GetLogs(content.Id).Last(); + var lastLog = AuditService.GetLogs(content.Id).Last(); Assert.AreEqual($"Unpublished languages: French (France)", lastLog.Comment); //re-get - content = ServiceContext.ContentService.GetById(content.Id); - content.SetCultureName("content-en", langGB.IsoCode); - unpublished = ServiceContext.ContentService.Unpublish(content, langGB.IsoCode); + content = ContentService.GetById(content.Id); + content.SetCultureName("content-en", langGb.IsoCode); + unpublished = ContentService.Unpublish(content, langGb.IsoCode); //audit log will only show that english was published - var logs = ServiceContext.AuditService.GetLogs(content.Id).ToList(); + var logs = AuditService.GetLogs(content.Id).ToList(); Assert.AreEqual($"Unpublished languages: English (United Kingdom)", logs[logs.Count - 2].Comment); Assert.AreEqual($"Unpublished (mandatory language unpublished)", logs[logs.Count - 1].Comment); } @@ -1083,11 +1061,10 @@ namespace Umbraco.Tests.Services public void Can_Publish_Content_1() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 2); + var content = ContentService.GetById(NodeIdSeed + 3); // Act - var published = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); // Assert Assert.That(published.Success, Is.True); @@ -1098,11 +1075,10 @@ namespace Umbraco.Tests.Services public void Can_Publish_Content_2() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 2); + var content = ContentService.GetById(NodeIdSeed + 3); // Act - var published = contentService.SaveAndPublish(content, userId: 0); + var published = ContentService.SaveAndPublish(content, userId: 0); // Assert Assert.That(published.Success, Is.True); @@ -1113,16 +1089,15 @@ namespace Umbraco.Tests.Services public void IsPublishable() { // Arrange - var contentService = ServiceContext.ContentService; - var parent = contentService.Create("parent", Constants.System.Root, "umbTextpage"); + var parent = ContentService.Create("parent", Constants.System.Root, "umbTextpage"); - contentService.SaveAndPublish(parent); - var content = contentService.Create("child", parent, "umbTextpage"); - contentService.Save(content); + ContentService.SaveAndPublish(parent); + var content = ContentService.Create("child", parent, "umbTextpage"); + ContentService.Save(content); - Assert.IsTrue(contentService.IsPathPublishable(content)); - contentService.Unpublish(parent); - Assert.IsFalse(contentService.IsPathPublishable(content)); + Assert.IsTrue(ContentService.IsPathPublishable(content)); + ContentService.Unpublish(parent); + Assert.IsFalse(ContentService.IsPathPublishable(content)); } [Test] @@ -1136,17 +1111,16 @@ namespace Umbraco.Tests.Services try { - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 2); + var content = ContentService.GetById(NodeIdSeed + 3); Assert.AreEqual("Home", content.Name); content.Name = "foo"; - var published = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); Assert.That(published.Success, Is.True); Assert.That(content.Published, Is.True); - var e = ServiceContext.ContentService.GetById(content.Id); + var e = ContentService.GetById(content.Id); Assert.AreEqual("foo", e.Name); } finally @@ -1161,55 +1135,58 @@ namespace Umbraco.Tests.Services var entity = args.PublishedEntities.First(); Assert.AreEqual("foo", entity.Name); - var e = ServiceContext.ContentService.GetById(entity.Id); + var e = ContentService.GetById(entity.Id); Assert.AreEqual("Home", e.Name); } [Test] public void Can_Not_Publish_Invalid_Cultures() { - var contentService = ServiceContext.ContentService; - var content = Mock.Of(c => c.ContentType == Mock.Of(s => s.Variations == ContentVariation.Culture)); + var content = new ContentBuilder() + .AddContentType() + .WithContentVariation(ContentVariation.Culture) + .Done() + .Build(); - Assert.Throws(() => contentService.SaveAndPublish(content, new[] {"*"})); - Assert.Throws(() => contentService.SaveAndPublish(content, new string[] { null })); - Assert.Throws(() => contentService.SaveAndPublish(content, new[] { "*", null })); - Assert.Throws(() => contentService.SaveAndPublish(content, new[] { "en-US", "*", "es-ES" })); + Assert.Throws(() => ContentService.SaveAndPublish(content, new[] {"*"})); + Assert.Throws(() => ContentService.SaveAndPublish(content, new string[] { null })); + Assert.Throws(() => ContentService.SaveAndPublish(content, new[] { "*", null })); + Assert.Throws(() => ContentService.SaveAndPublish(content, new[] { "en-US", "*", "es-ES" })); } [Test] public void Can_Publish_Only_Valid_Content() { - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = MockedContentTypes.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", true); - contentTypeService.Save(contentType); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); - const int parentId = NodeDto.NodeIdSeed + 2; + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", mandatoryProperties: true, defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); - var contentService = ServiceContext.ContentService; + var parentId = NodeIdSeed + 3; - var parent = contentService.GetById(parentId); + var parent = ContentService.GetById(parentId); - var parentPublished = contentService.SaveAndPublish(parent); + var parentPublished = ContentService.SaveAndPublish(parent); // parent can publish values // and therefore can be published Assert.IsTrue(parentPublished.Success); Assert.IsTrue(parent.Published); - var content = MockedContent.CreateSimpleContent(contentType, "Invalid Content", parentId); + var content = ContentBuilder.CreateSimpleContent(contentType, "Invalid Content", parentId); content.SetValue("author", string.Empty); Assert.IsFalse(content.HasIdentity); // content cannot publish values because they are invalid - var propertyValidationService = new PropertyValidationService(Factory.GetInstance(), ServiceContext.DataTypeService, ServiceContext.TextService); + var propertyValidationService = new PropertyValidationService(PropertyEditorCollection, DataTypeService, TextService); var isValid = propertyValidationService.IsPropertyDataValid(content, out var invalidProperties, CultureImpact.Invariant); Assert.IsFalse(isValid); Assert.IsNotEmpty(invalidProperties); // and therefore cannot be published, // because it did not have a published version at all - var contentPublished = contentService.SaveAndPublish(content); + var contentPublished = ContentService.SaveAndPublish(content); Assert.IsFalse(contentPublished.Success); Assert.AreEqual(PublishResultType.FailedPublishContentInvalid, contentPublished.Result); Assert.IsFalse(content.Published); @@ -1224,35 +1201,38 @@ namespace Umbraco.Tests.Services public void Can_Publish_And_Unpublish_Cultures_In_Single_Operation() { //TODO: This is using an internal API - we aren't exposing this publicly (at least for now) but we'll keep the test around + var langFr = new LanguageBuilder() + .WithCultureInfo("fr") + .Build(); + var langDa = new LanguageBuilder() + .WithCultureInfo("da") + .Build(); + LocalizationService.Save(langFr); + LocalizationService.Save(langDa); - var langFr = new Language(_globalSettings, "fr"); - var langDa = new Language(_globalSettings, "da"); - ServiceContext.LocalizationService.Save(langFr); - ServiceContext.LocalizationService.Save(langDa); - - var ct = MockedContentTypes.CreateBasicContentType(); + var ct = ContentTypeBuilder.CreateBasicContentType(); ct.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(ct); + ContentTypeService.Save(ct); - IContent content = MockedContent.CreateBasicContent(ct); + IContent content = ContentBuilder.CreateBasicContent(ct); content.SetCultureName("name-fr", langFr.IsoCode); content.SetCultureName("name-da", langDa.IsoCode); content.PublishCulture(CultureImpact.Explicit(langFr.IsoCode, langFr.IsDefault)); - var result = ((ContentService)ServiceContext.ContentService).CommitDocumentChanges(content); + var result = ((ContentService)ContentService).CommitDocumentChanges(content); Assert.IsTrue(result.Success); - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsTrue(content.IsCulturePublished(langFr.IsoCode)); Assert.IsFalse(content.IsCulturePublished(langDa.IsoCode)); content.UnpublishCulture(langFr.IsoCode); content.PublishCulture(CultureImpact.Explicit(langDa.IsoCode, langDa.IsDefault)); - result = ((ContentService)ServiceContext.ContentService).CommitDocumentChanges(content); + result = ((ContentService)ContentService).CommitDocumentChanges(content); Assert.IsTrue(result.Success); Assert.AreEqual(PublishResultType.SuccessMixedCulture, result.Result); - content = ServiceContext.ContentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsFalse(content.IsCulturePublished(langFr.IsoCode)); Assert.IsTrue(content.IsCulturePublished(langDa.IsoCode)); } @@ -1281,10 +1261,9 @@ namespace Umbraco.Tests.Services [Test] public void Can_Publish_Content_Children() { - const int parentId = NodeDto.NodeIdSeed + 2; + var parentId = NodeIdSeed + 3; - var contentService = ServiceContext.ContentService; - var parent = contentService.GetById(parentId); + var parent = ContentService.GetById(parentId); Console.WriteLine(" " + parent.Id); const int pageSize = 500; @@ -1292,7 +1271,7 @@ namespace Umbraco.Tests.Services var total = long.MaxValue; while(page * pageSize < total) { - var descendants = contentService.GetPagedDescendants(parent.Id, page++, pageSize, out total); + var descendants = ContentService.GetPagedDescendants(parent.Id, page++, pageSize, out total); foreach (var x in descendants) Console.WriteLine(" ".Substring(0, x.Level) + x.Id); } @@ -1302,7 +1281,7 @@ namespace Umbraco.Tests.Services // publish parent & its branch // only those that are not already published // only invariant/neutral values - var parentPublished = contentService.SaveAndPublishBranch(parent, true); + var parentPublished = ContentService.SaveAndPublishBranch(parent, true); foreach (var result in parentPublished) Console.WriteLine(" ".Substring(0, result.Content.Level) + $"{result.Content.Id}: {result.Result}"); @@ -1311,26 +1290,25 @@ namespace Umbraco.Tests.Services Assert.IsTrue(parentPublished.All(x => x.Success)); Assert.IsTrue(parent.Published); - var children = contentService.GetPagedChildren(parentId, 0, 500, out var totalChildren); //we only want the first so page size, etc.. is abitrary + var children = ContentService.GetPagedChildren(parentId, 0, 500, out var totalChildren); //we only want the first so page size, etc.. is abitrary // children are published including ... that was released 5 mins ago - Assert.IsTrue(children.First(x => x.Id == NodeDto.NodeIdSeed + 4).Published); + Assert.IsTrue(children.First(x => x.Id == NodeIdSeed + 4).Published); } [Test] public void Cannot_Publish_Expired_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 4); //This Content expired 5min ago + var content = ContentService.GetById(NodeIdSeed + 4); //This Content expired 5min ago content.ContentSchedule.Add(null, DateTime.Now.AddMinutes(-5)); - contentService.Save(content); + ContentService.Save(content); - var parent = contentService.GetById(NodeDto.NodeIdSeed + 2); - var parentPublished = contentService.SaveAndPublish(parent, userId: Constants.Security.SuperUserId);//Publish root Home node to enable publishing of 'NodeDto.NodeIdSeed + 3' + var parent = ContentService.GetById(NodeIdSeed + 3); + var parentPublished = ContentService.SaveAndPublish(parent, userId: Constants.Security.SuperUserId);//Publish root Home node to enable publishing of 'NodeIdSeed + 4' // Act - var published = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); // Assert Assert.That(parentPublished.Success, Is.True); @@ -1342,16 +1320,16 @@ namespace Umbraco.Tests.Services [Test] public void Cannot_Publish_Expired_Culture() { - var contentType = MockedContentTypes.CreateBasicContentType(); + var contentType = ContentTypeBuilder.CreateBasicContentType(); contentType.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); - var content = MockedContent.CreateBasicContent(contentType); + var content = ContentBuilder.CreateBasicContent(contentType); content.SetCultureName("Hello", "en-US"); content.ContentSchedule.Add("en-US", null, DateTime.Now.AddMinutes(-5)); - ServiceContext.ContentService.Save(content); + ContentService.Save(content); - var published = ServiceContext.ContentService.SaveAndPublish(content, "en-US", Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, "en-US", Constants.Security.SuperUserId); Assert.IsFalse(published.Success); Assert.AreEqual(PublishResultType.FailedPublishCultureHasExpired, published.Result); @@ -1362,16 +1340,15 @@ namespace Umbraco.Tests.Services public void Cannot_Publish_Content_Awaiting_Release() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 3); + var content = ContentService.GetById(NodeIdSeed + 4); content.ContentSchedule.Add(DateTime.Now.AddHours(2), null); - contentService.Save(content, Constants.Security.SuperUserId); + ContentService.Save(content, Constants.Security.SuperUserId); - var parent = contentService.GetById(NodeDto.NodeIdSeed + 2); - var parentPublished = contentService.SaveAndPublish(parent, userId: Constants.Security.SuperUserId);//Publish root Home node to enable publishing of 'NodeDto.NodeIdSeed + 3' + var parent = ContentService.GetById(NodeIdSeed + 3); + var parentPublished = ContentService.SaveAndPublish(parent, userId: Constants.Security.SuperUserId);//Publish root Home node to enable publishing of 'NodeIdSeed + 4' // Act - var published = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); // Assert Assert.That(parentPublished.Success, Is.True); @@ -1383,16 +1360,16 @@ namespace Umbraco.Tests.Services [Test] public void Cannot_Publish_Culture_Awaiting_Release() { - var contentType = MockedContentTypes.CreateBasicContentType(); + var contentType = ContentTypeBuilder.CreateBasicContentType(); contentType.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); - var content = MockedContent.CreateBasicContent(contentType); + var content = ContentBuilder.CreateBasicContent(contentType); content.SetCultureName("Hello", "en-US"); content.ContentSchedule.Add("en-US", DateTime.Now.AddHours(2), null); - ServiceContext.ContentService.Save(content); + ContentService.Save(content); - var published = ServiceContext.ContentService.SaveAndPublish(content, "en-US", Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, "en-US", Constants.Security.SuperUserId); Assert.IsFalse(published.Success); Assert.AreEqual(PublishResultType.FailedPublishCultureAwaitingRelease, published.Result); @@ -1403,12 +1380,11 @@ namespace Umbraco.Tests.Services public void Cannot_Publish_Content_Where_Parent_Is_Unpublished() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.Create("Subpage with Unpublished Parent", NodeDto.NodeIdSeed + 2, "umbTextpage", Constants.Security.SuperUserId); - contentService.Save(content, Constants.Security.SuperUserId); + var content = ContentService.Create("Subpage with Unpublished Parent", NodeIdSeed + 3, "umbTextpage", Constants.Security.SuperUserId); + ContentService.Save(content, Constants.Security.SuperUserId); // Act - var published = contentService.SaveAndPublishBranch(content, true); + var published = ContentService.SaveAndPublishBranch(content, true); // Assert Assert.That(published.All(x => x.Success), Is.False); @@ -1419,11 +1395,10 @@ namespace Umbraco.Tests.Services public void Cannot_Publish_Trashed_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 5); + var content = ContentService.GetById(NodeIdSeed + 6); // Act - var published = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); // Assert Assert.That(published.Success, Is.False); @@ -1435,12 +1410,11 @@ namespace Umbraco.Tests.Services public void Can_Save_And_Publish_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.Create("Home US", - 1, "umbTextpage", Constants.Security.SuperUserId); + var content = ContentService.Create("Home US", - 1, "umbTextpage", Constants.Security.SuperUserId); content.SetValue("author", "Barack Obama"); // Act - var published = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); // Assert Assert.That(content.HasIdentity, Is.True); @@ -1459,18 +1433,17 @@ namespace Umbraco.Tests.Services public void Can_Save_And_Publish_Content_And_Child_Without_Identity() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.Create("Home US", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); + var content = ContentService.Create("Home US", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); content.SetValue("author", "Barack Obama"); // Act - var published = contentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); - var childContent = contentService.Create("Child", content.Id, "umbTextpage", Constants.Security.SuperUserId); + var published = ContentService.SaveAndPublish(content, userId: Constants.Security.SuperUserId); + var childContent = ContentService.Create("Child", content.Id, "umbTextpage", Constants.Security.SuperUserId); // Reset all identity properties childContent.Id = 0; childContent.Path = null; ((Content)childContent).ResetIdentity(); - var childPublished = contentService.SaveAndPublish(childContent, userId: Constants.Security.SuperUserId); + var childPublished = ContentService.SaveAndPublish(childContent, userId: Constants.Security.SuperUserId); // Assert Assert.That(content.HasIdentity, Is.True); @@ -1485,22 +1458,20 @@ namespace Umbraco.Tests.Services public void Can_Get_Published_Descendant_Versions() { // Arrange - var contentService = ServiceContext.ContentService; + var root = ContentService.GetById(NodeIdSeed + 3); + var rootPublished = ContentService.SaveAndPublish(root); - var root = contentService.GetById(NodeDto.NodeIdSeed + 2); - var rootPublished = contentService.SaveAndPublish(root); - - var content = contentService.GetById(NodeDto.NodeIdSeed + 4); + var content = ContentService.GetById(NodeIdSeed + 4); content.Properties["title"].SetValue(content.Properties["title"].GetValue() + " Published"); - var contentPublished = contentService.SaveAndPublish(content); + var contentPublished = ContentService.SaveAndPublish(content); var publishedVersion = content.VersionId; content.Properties["title"].SetValue(content.Properties["title"].GetValue() + " Saved"); - contentService.Save(content); + ContentService.Save(content); Assert.AreEqual(publishedVersion, content.VersionId); // Act - var publishedDescendants = ((ContentService) contentService).GetPublishedDescendants(root).ToList(); + var publishedDescendants = ContentService.GetPublishedDescendants(root).ToList(); Assert.AreNotEqual(0, publishedDescendants.Count); // Assert @@ -1520,7 +1491,7 @@ namespace Umbraco.Tests.Services Assert.That(publishedContentVersion.Properties["title"].GetValue(), Contains.Substring("Saved")); //Ensure that the latest version of the content is ok - var currentContent = contentService.GetById(NodeDto.NodeIdSeed + 4); + var currentContent = ContentService.GetById(NodeIdSeed + 4); Assert.That(currentContent.Published, Is.True); Assert.That(currentContent.Properties["title"].GetValue(published: true), Contains.Substring("Published")); Assert.That(currentContent.Properties["title"].GetValue(), Contains.Substring("Saved")); @@ -1531,12 +1502,11 @@ namespace Umbraco.Tests.Services public void Can_Save_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.Create("Home US", - 1, "umbTextpage", Constants.Security.SuperUserId); + var content = ContentService.Create("Home US", - 1, "umbTextpage", Constants.Security.SuperUserId); content.SetValue("author", "Barack Obama"); // Act - contentService.Save(content, Constants.Security.SuperUserId); + ContentService.Save(content, Constants.Security.SuperUserId); // Assert Assert.That(content.HasIdentity, Is.True); @@ -1546,16 +1516,13 @@ namespace Umbraco.Tests.Services public void Can_Bulk_Save_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; - - var contentType = contentTypeService.Get("umbTextpage"); - Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Subpage 1", NodeDto.NodeIdSeed + 2); - Content subpage2 = MockedContent.CreateSimpleContent(contentType, "Text Subpage 2", NodeDto.NodeIdSeed + 2); + var contentType = ContentTypeService.Get("umbTextpage"); + var subpage = ContentBuilder.CreateSimpleContent(contentType, "Text Subpage 1", NodeIdSeed + 3); + var subpage2 = ContentBuilder.CreateSimpleContent(contentType, "Text Subpage 2", NodeIdSeed + 3); var list = new List {subpage, subpage2}; // Act - contentService.Save(list, Constants.Security.SuperUserId); + ContentService.Save(list, Constants.Security.SuperUserId); // Assert Assert.That(list.Any(x => !x.HasIdentity), Is.False); @@ -1565,11 +1532,10 @@ namespace Umbraco.Tests.Services public void Can_Bulk_Save_New_Hierarchy_Content() { // Arrange - var contentService = ServiceContext.ContentService; var hierarchy = CreateContentHierarchy().ToList(); // Act - contentService.Save(hierarchy, Constants.Security.SuperUserId); + ContentService.Save(hierarchy, Constants.Security.SuperUserId); Assert.That(hierarchy.Any(), Is.True); Assert.That(hierarchy.Any(x => x.HasIdentity == false), Is.False); @@ -1582,14 +1548,12 @@ namespace Umbraco.Tests.Services public void Can_Delete_Content_Of_Specific_ContentType() { // Arrange - var contentService = ServiceContext.ContentService; - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = contentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); // Act - contentService.DeleteOfType(contentType.Id); - var rootContent = contentService.GetRootContent(); - var contents = contentService.GetPagedOfType(contentType.Id, 0, int.MaxValue, out var _, null); + ContentService.DeleteOfType(contentType.Id); + var rootContent = ContentService.GetRootContent(); + var contents = ContentService.GetPagedOfType(contentType.Id, 0, int.MaxValue, out var _, null); // Assert Assert.That(rootContent.Any(), Is.False); @@ -1600,12 +1564,11 @@ namespace Umbraco.Tests.Services public void Can_Delete_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 4); + var content = ContentService.GetById(NodeIdSeed + 3); // Act - contentService.Delete(content, Constants.Security.SuperUserId); - var deleted = contentService.GetById(NodeDto.NodeIdSeed + 4); + ContentService.Delete(content, Constants.Security.SuperUserId); + var deleted = ContentService.GetById(NodeIdSeed + 3); // Assert Assert.That(deleted, Is.Null); @@ -1615,11 +1578,10 @@ namespace Umbraco.Tests.Services public void Can_Move_Content_To_RecycleBin() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 3); + var content = ContentService.GetById(NodeIdSeed + 3); // Act - contentService.MoveToRecycleBin(content, Constants.Security.SuperUserId); + ContentService.MoveToRecycleBin(content, Constants.Security.SuperUserId); // Assert Assert.That(content.ParentId, Is.EqualTo(-20)); @@ -1629,19 +1591,18 @@ namespace Umbraco.Tests.Services [Test] public void Can_Move_Content_Structure_To_RecycleBin_And_Empty_RecycleBin() { - var contentService = ServiceContext.ContentService; - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); - var subsubpage = MockedContent.CreateSimpleContent(contentType, "Text Page 3", NodeDto.NodeIdSeed + 3); - contentService.Save(subsubpage, Constants.Security.SuperUserId); + var subsubpage = ContentBuilder.CreateSimpleContent(contentType, "Text Page 3", NodeIdSeed + 4); + ContentService.Save(subsubpage, Constants.Security.SuperUserId); - var content = contentService.GetById(NodeDto.NodeIdSeed + 2); + var content = ContentService.GetById(NodeIdSeed + 3); const int pageSize = 500; var page = 0; var total = long.MaxValue; var descendants = new List(); while(page * pageSize < total) - descendants.AddRange(contentService.GetPagedDescendants(content.Id, page++, pageSize, out total)); + descendants.AddRange(ContentService.GetPagedDescendants(content.Id, page++, pageSize, out total)); Assert.AreNotEqual(-20, content.ParentId); Assert.IsFalse(content.Trashed); @@ -1649,12 +1610,12 @@ namespace Umbraco.Tests.Services Assert.IsFalse(descendants.Any(x => x.Path.StartsWith("-1,-20,"))); Assert.IsFalse(descendants.Any(x => x.Trashed)); - contentService.MoveToRecycleBin(content, Constants.Security.SuperUserId); + ContentService.MoveToRecycleBin(content, Constants.Security.SuperUserId); descendants.Clear(); page = 0; while (page * pageSize < total) - descendants.AddRange(contentService.GetPagedDescendants(content.Id, page++, pageSize, out total)); + descendants.AddRange(ContentService.GetPagedDescendants(content.Id, page++, pageSize, out total)); Assert.AreEqual(-20, content.ParentId); Assert.IsTrue(content.Trashed); @@ -1662,8 +1623,8 @@ namespace Umbraco.Tests.Services Assert.IsTrue(descendants.All(x => x.Path.StartsWith("-1,-20,"))); Assert.True(descendants.All(x => x.Trashed)); - contentService.EmptyRecycleBin(Constants.Security.SuperUserId); - var trashed = contentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); + ContentService.EmptyRecycleBin(Constants.Security.SuperUserId); + var trashed = ContentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); Assert.IsEmpty(trashed); } @@ -1671,11 +1632,9 @@ namespace Umbraco.Tests.Services public void Can_Empty_RecycleBin() { // Arrange - var contentService = ServiceContext.ContentService; - // Act - contentService.EmptyRecycleBin(Constants.Security.SuperUserId); - var contents = contentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); + ContentService.EmptyRecycleBin(Constants.Security.SuperUserId); + var contents = ContentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); // Assert Assert.That(contents.Any(), Is.False); @@ -1685,33 +1644,36 @@ namespace Umbraco.Tests.Services public void Ensures_Permissions_Are_Retained_For_Copied_Descendants_With_Explicit_Permissions() { // Arrange - var userGroup = MockedUserGroup.CreateUserGroup("1"); - ServiceContext.UserService.Save(userGroup); + var userGroup = UserGroupBuilder.CreateUserGroup("1"); + UserService.Save(userGroup); - var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage"); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage1", "Textpage", defaultTemplateId: template.Id); contentType.AllowedContentTypes = new List { new ContentTypeSort(new Lazy(() => contentType.Id), 0, contentType.Alias) }; - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - ServiceContext.ContentTypeService.Save(contentType); + FileService.SaveTemplate(contentType.DefaultTemplate); + ContentTypeService.Save(contentType); - var parentPage = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(parentPage); + var parentPage = ContentBuilder.CreateSimpleContent(contentType); + ContentService.Save(parentPage); - var childPage = MockedContent.CreateSimpleContent(contentType, "child", parentPage); - ServiceContext.ContentService.Save(childPage); + var childPage = ContentBuilder.CreateSimpleContent(contentType, "child", parentPage); + ContentService.Save(childPage); //assign explicit permissions to the child - ServiceContext.ContentService.SetPermission(childPage, 'A', new[] { userGroup.Id }); + ContentService.SetPermission(childPage, 'A', new[] { userGroup.Id }); //Ok, now copy, what should happen is the childPage will retain it's own permissions - var parentPage2 = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(parentPage2); + var parentPage2 = ContentBuilder.CreateSimpleContent(contentType); + ContentService.Save(parentPage2); - var copy = ServiceContext.ContentService.Copy(childPage, parentPage2.Id, false, true); + var copy = ContentService.Copy(childPage, parentPage2.Id, false, true); //get the permissions and verify - var permissions = ServiceContext.UserService.GetPermissionsForPath(userGroup, copy.Path, fallbackToDefaultPermissions: true); + var permissions = UserService.GetPermissionsForPath(userGroup, copy.Path, fallbackToDefaultPermissions: true); var allPermissions = permissions.GetAllPermissions().ToArray(); Assert.AreEqual(1, allPermissions.Length); Assert.AreEqual("A", allPermissions[0]); @@ -1721,27 +1683,30 @@ namespace Umbraco.Tests.Services public void Ensures_Permissions_Are_Inherited_For_Copied_Descendants() { // Arrange - var userGroup = MockedUserGroup.CreateUserGroup("1"); - ServiceContext.UserService.Save(userGroup); + var userGroup = UserGroupBuilder.CreateUserGroup("1"); + UserService.Save(userGroup); - var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage"); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage1", "Textpage", defaultTemplateId: template.Id); contentType.AllowedContentTypes = new List { new ContentTypeSort(new Lazy(() => contentType.Id), 0, contentType.Alias) }; - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - ServiceContext.ContentTypeService.Save(contentType); + FileService.SaveTemplate(contentType.DefaultTemplate); + ContentTypeService.Save(contentType); - var parentPage = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(parentPage); - ServiceContext.ContentService.SetPermission(parentPage, 'A', new[] { userGroup.Id }); + var parentPage = ContentBuilder.CreateSimpleContent(contentType); + ContentService.Save(parentPage); + ContentService.SetPermission(parentPage, 'A', new[] { userGroup.Id }); - var childPage1 = MockedContent.CreateSimpleContent(contentType, "child1", parentPage); - ServiceContext.ContentService.Save(childPage1); - var childPage2 = MockedContent.CreateSimpleContent(contentType, "child2", childPage1); - ServiceContext.ContentService.Save(childPage2); - var childPage3 = MockedContent.CreateSimpleContent(contentType, "child3", childPage2); - ServiceContext.ContentService.Save(childPage3); + var childPage1 = ContentBuilder.CreateSimpleContent(contentType, "child1", parentPage); + ContentService.Save(childPage1); + var childPage2 = ContentBuilder.CreateSimpleContent(contentType, "child2", childPage1); + ContentService.Save(childPage2); + var childPage3 = ContentBuilder.CreateSimpleContent(contentType, "child3", childPage2); + ContentService.Save(childPage3); //Verify that the children have the inherited permissions var descendants = new List(); @@ -1749,34 +1714,34 @@ namespace Umbraco.Tests.Services var page = 0; var total = long.MaxValue; while(page * pageSize < total) - descendants.AddRange(ServiceContext.ContentService.GetPagedDescendants(parentPage.Id, page++, pageSize, out total)); + descendants.AddRange(ContentService.GetPagedDescendants(parentPage.Id, page++, pageSize, out total)); Assert.AreEqual(3, descendants.Count); foreach (var descendant in descendants) { - var permissions = ServiceContext.UserService.GetPermissionsForPath(userGroup, descendant.Path, fallbackToDefaultPermissions: true); + var permissions = UserService.GetPermissionsForPath(userGroup, descendant.Path, fallbackToDefaultPermissions: true); var allPermissions = permissions.GetAllPermissions().ToArray(); Assert.AreEqual(1, allPermissions.Length); Assert.AreEqual("A", allPermissions[0]); } //create a new parent with a new permission structure - var parentPage2 = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(parentPage2); - ServiceContext.ContentService.SetPermission(parentPage2, 'B', new[] { userGroup.Id }); + var parentPage2 = ContentBuilder.CreateSimpleContent(contentType); + ContentService.Save(parentPage2); + ContentService.SetPermission(parentPage2, 'B', new[] { userGroup.Id }); //Now copy, what should happen is the child pages will now have permissions inherited from the new parent - var copy = ServiceContext.ContentService.Copy(childPage1, parentPage2.Id, false, true); + var copy = ContentService.Copy(childPage1, parentPage2.Id, false, true); descendants.Clear(); page = 0; while (page * pageSize < total) - descendants.AddRange(ServiceContext.ContentService.GetPagedDescendants(parentPage2.Id, page++, pageSize, out total)); + descendants.AddRange(ContentService.GetPagedDescendants(parentPage2.Id, page++, pageSize, out total)); Assert.AreEqual(3, descendants.Count); foreach (var descendant in descendants) { - var permissions = ServiceContext.UserService.GetPermissionsForPath(userGroup, descendant.Path, fallbackToDefaultPermissions: true); + var permissions = UserService.GetPermissionsForPath(userGroup, descendant.Path, fallbackToDefaultPermissions: true); var allPermissions = permissions.GetAllPermissions().ToArray(); Assert.AreEqual(1, allPermissions.Length); Assert.AreEqual("B", allPermissions[0]); @@ -1797,37 +1762,37 @@ namespace Umbraco.Tests.Services // * published & preview data // * multiple versions - var contentType = MockedContentTypes.CreateAllTypesContentType("test", "test"); - ServiceContext.ContentTypeService.Save(contentType, Constants.Security.SuperUserId); + var contentType = ContentTypeBuilder.CreateAllTypesContentType("test", "test"); + ContentTypeService.Save(contentType, Constants.Security.SuperUserId); object obj = new { tags = "[\"Hello\",\"World\"]" }; - var content1 = MockedContent.CreateBasicContent(contentType); + var content1 = ContentBuilder.CreateBasicContent(contentType); content1.PropertyValues(obj); content1.ResetDirtyProperties(false); - ServiceContext.ContentService.Save(content1, Constants.Security.SuperUserId); - Assert.IsTrue(ServiceContext.ContentService.SaveAndPublish(content1, userId: 0).Success); - var content2 = MockedContent.CreateBasicContent(contentType); + ContentService.Save(content1, Constants.Security.SuperUserId); + Assert.IsTrue(ContentService.SaveAndPublish(content1, userId: 0).Success); + var content2 = ContentBuilder.CreateBasicContent(contentType); content2.PropertyValues(obj); content2.ResetDirtyProperties(false); - ServiceContext.ContentService.Save(content2, Constants.Security.SuperUserId); - Assert.IsTrue(ServiceContext.ContentService.SaveAndPublish(content2, userId: 0).Success); + ContentService.Save(content2, Constants.Security.SuperUserId); + Assert.IsTrue(ContentService.SaveAndPublish(content2, userId: 0).Success); - var editorGroup = ServiceContext.UserService.GetUserGroupByAlias(Constants.Security.EditorGroupAlias); + var editorGroup = UserService.GetUserGroupByAlias(Constants.Security.EditorGroupAlias); editorGroup.StartContentId = content1.Id; - ServiceContext.UserService.Save(editorGroup); + UserService.Save(editorGroup); - var admin = ServiceContext.UserService.GetUserById(Constants.Security.SuperUserId); + var admin = UserService.GetUserById(Constants.Security.SuperUserId); admin.StartContentIds = new[] {content1.Id}; - ServiceContext.UserService.Save(admin); + UserService.Save(admin); - ServiceContext.RelationService.Save(new RelationType("test", "test", false, Constants.ObjectTypes.Document, Constants.ObjectTypes.Document)); - Assert.IsNotNull(ServiceContext.RelationService.Relate(content1, content2, "test")); + RelationService.Save(new RelationType("test", "test", false, Constants.ObjectTypes.Document, Constants.ObjectTypes.Document)); + Assert.IsNotNull(RelationService.Relate(content1, content2, "test")); - ServiceContext.PublicAccessService.Save(new PublicAccessEntry(content1, content2, content2, new List + PublicAccessService.Save(new PublicAccessEntry(content1, content2, content2, new List { new PublicAccessRule { @@ -1835,23 +1800,23 @@ namespace Umbraco.Tests.Services RuleValue = "test" } })); - Assert.IsTrue(ServiceContext.PublicAccessService.AddRule(content1, "test2", "test2").Success); + Assert.IsTrue(PublicAccessService.AddRule(content1, "test2", "test2").Success); - var user = ServiceContext.UserService.GetUserById(Constants.Security.SuperUserId); - var userGroup = ServiceContext.UserService.GetUserGroupByAlias(user.Groups.First().Alias); - Assert.IsNotNull(ServiceContext.NotificationService.CreateNotification(user, content1, "X")); + var user = UserService.GetUserById(Constants.Security.SuperUserId); + var userGroup = UserService.GetUserGroupByAlias(user.Groups.First().Alias); + Assert.IsNotNull(NotificationService.CreateNotification(user, content1, "X")); - ServiceContext.ContentService.SetPermission(content1, 'A', new[] { userGroup.Id }); + ContentService.SetPermission(content1, 'A', new[] { userGroup.Id }); - Assert.IsTrue(ServiceContext.DomainService.Save(new UmbracoDomain("www.test.com", "en-AU") + Assert.IsTrue(DomainService.Save(new UmbracoDomain("www.test.com", "en-AU") { RootContentId = content1.Id }).Success); // Act - ServiceContext.ContentService.MoveToRecycleBin(content1); - ServiceContext.ContentService.EmptyRecycleBin(Constants.Security.SuperUserId); - var contents = ServiceContext.ContentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); + ContentService.MoveToRecycleBin(content1, Constants.Security.SuperUserId); + ContentService.EmptyRecycleBin(Constants.Security.SuperUserId); + var contents = ContentService.GetPagedContentInRecycleBin(0, int.MaxValue, out var _).ToList(); // Assert Assert.That(contents.Any(), Is.False); @@ -1861,14 +1826,13 @@ namespace Umbraco.Tests.Services public void Can_Move_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 5); + var content = ContentService.GetById(NodeIdSeed + 6); // Act - moving out of recycle bin - contentService.Move(content, NodeDto.NodeIdSeed + 2); + ContentService.Move(content, NodeIdSeed + 3); // Assert - Assert.That(content.ParentId, Is.EqualTo(NodeDto.NodeIdSeed + 2)); + Assert.That(content.ParentId, Is.EqualTo(NodeIdSeed + 3)); Assert.That(content.Trashed, Is.False); Assert.That(content.Published, Is.False); } @@ -1877,12 +1841,11 @@ namespace Umbraco.Tests.Services public void Can_Copy_Content() { // Arrange - var contentService = ServiceContext.ContentService; - var temp = contentService.GetById(NodeDto.NodeIdSeed + 4); + var temp = ContentService.GetById(NodeIdSeed + 4); // Act - var copy = contentService.Copy(temp, temp.ParentId, false, Constants.Security.SuperUserId); - var content = contentService.GetById(NodeDto.NodeIdSeed + 4); + var copy = ContentService.Copy(temp, temp.ParentId, false, Constants.Security.SuperUserId); + var content = ContentService.GetById(NodeIdSeed + 4); // Assert Assert.That(copy, Is.Not.Null); @@ -1917,18 +1880,19 @@ namespace Umbraco.Tests.Services try { - var contentService = ServiceContext.ContentService; - ContentService.Copying += copying; ContentService.Copied += copied; - var contentType = MockedContentTypes.CreateSimpleContentType(); - ServiceContext.ContentTypeService.Save(contentType); - var content = MockedContent.CreateSimpleContent(contentType); - content.SetValue("title", "New Value"); - contentService.Save(content); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); - var copy = contentService.Copy(content, content.ParentId, false, Constants.Security.SuperUserId); + var contentType = ContentTypeBuilder.CreateSimpleContentType(defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); + var content = ContentBuilder.CreateSimpleContent(contentType); + content.SetValue("title", "New Value"); + ContentService.Save(content); + + var copy = ContentService.Copy(content, content.ParentId, false, Constants.Security.SuperUserId); Assert.AreEqual("1", copy.GetValue("title")); } finally @@ -1942,23 +1906,22 @@ namespace Umbraco.Tests.Services public void Can_Copy_Recursive() { // Arrange - var contentService = ServiceContext.ContentService; - var temp = contentService.GetById(NodeDto.NodeIdSeed + 2); + var temp = ContentService.GetById(NodeIdSeed + 3); Assert.AreEqual("Home", temp.Name); - Assert.AreEqual(2, contentService.CountChildren(temp.Id)); + Assert.AreEqual(2, ContentService.CountChildren(temp.Id)); // Act - var copy = contentService.Copy(temp, temp.ParentId, false, true, Constants.Security.SuperUserId); - var content = contentService.GetById(NodeDto.NodeIdSeed + 2); + var copy = ContentService.Copy(temp, temp.ParentId, false, true, Constants.Security.SuperUserId); + var content = ContentService.GetById(NodeIdSeed + 3); // Assert Assert.That(copy, Is.Not.Null); Assert.That(copy.Id, Is.Not.EqualTo(content.Id)); Assert.AreNotSame(content, copy); - Assert.AreEqual(2, contentService.CountChildren(copy.Id)); + Assert.AreEqual(2, ContentService.CountChildren(copy.Id)); - var child = contentService.GetById(NodeDto.NodeIdSeed + 3); - var childCopy = contentService.GetPagedChildren(copy.Id, 0, 500, out var total).First(); + var child = ContentService.GetById(NodeIdSeed + 4); + var childCopy = ContentService.GetPagedChildren(copy.Id, 0, 500, out var total).First(); Assert.AreEqual(childCopy.Name, child.Name); Assert.AreNotEqual(childCopy.Id, child.Id); Assert.AreNotEqual(childCopy.Key, child.Key); @@ -1968,20 +1931,19 @@ namespace Umbraco.Tests.Services public void Can_Copy_NonRecursive() { // Arrange - var contentService = ServiceContext.ContentService; - var temp = contentService.GetById(NodeDto.NodeIdSeed + 2); + var temp = ContentService.GetById(NodeIdSeed + 3); Assert.AreEqual("Home", temp.Name); - Assert.AreEqual(2, contentService.CountChildren(temp.Id)); + Assert.AreEqual(2, ContentService.CountChildren(temp.Id)); // Act - var copy = contentService.Copy(temp, temp.ParentId, false, false, Constants.Security.SuperUserId); - var content = contentService.GetById(NodeDto.NodeIdSeed + 2); + var copy = ContentService.Copy(temp, temp.ParentId, false, false, Constants.Security.SuperUserId); + var content = ContentService.GetById(NodeIdSeed + 3); // Assert Assert.That(copy, Is.Not.Null); Assert.That(copy.Id, Is.Not.EqualTo(content.Id)); Assert.AreNotSame(content, copy); - Assert.AreEqual(0, contentService.CountChildren(copy.Id)); + Assert.AreEqual(0, ContentService.CountChildren(copy.Id)); } [Test] @@ -1989,51 +1951,50 @@ namespace Umbraco.Tests.Services { const string propAlias = "tags"; - var contentService = ServiceContext.ContentService; - // create a content type that has a 'tags' property // the property needs to support tags, else nothing works of course! - var contentType = MockedContentTypes.CreateSimpleContentType3("umbTagsPage", "TagsPage"); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + var contentType = ContentTypeBuilder.CreateSimpleTagsContentType("umbTagsPage", "TagsPage", defaultTemplateId: template.Id); contentType.Key = new Guid("78D96D30-1354-4A1E-8450-377764200C58"); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); - var content = MockedContent.CreateSimpleContent(contentType, "Simple Tags Page", Constants.System.Root); - content.AssignTags(PropertyEditorCollection.Value, DataTypeService, propAlias, new[] {"hello", "world"}); - contentService.Save(content); + var content = ContentBuilder.CreateSimpleContent(contentType, "Simple Tags Page", Constants.System.Root); + content.AssignTags(PropertyEditorCollection, DataTypeService, propAlias, new[] {"hello", "world"}); + ContentService.Save(content); // value has been set but no tags have been created (not published) Assert.AreEqual("[\"hello\",\"world\"]", content.GetValue(propAlias)); - var contentTags = ServiceContext.TagService.GetTagsForEntity(content.Id).ToArray(); + var contentTags = TagService.GetTagsForEntity(content.Id).ToArray(); Assert.AreEqual(0, contentTags.Length); // reloading the content yields the same result - content = (Content) contentService.GetById(content.Id); + content = (Content) ContentService.GetById(content.Id); Assert.AreEqual("[\"hello\",\"world\"]", content.GetValue(propAlias)); - contentTags = ServiceContext.TagService.GetTagsForEntity(content.Id).ToArray(); + contentTags = TagService.GetTagsForEntity(content.Id).ToArray(); Assert.AreEqual(0, contentTags.Length); // publish - contentService.SaveAndPublish(content); + ContentService.SaveAndPublish(content); // now tags have been set (published) Assert.AreEqual("[\"hello\",\"world\"]", content.GetValue(propAlias)); - contentTags = ServiceContext.TagService.GetTagsForEntity(content.Id).ToArray(); + contentTags = TagService.GetTagsForEntity(content.Id).ToArray(); Assert.AreEqual(2, contentTags.Length); // copy - var copy = contentService.Copy(content, content.ParentId, false); + var copy = ContentService.Copy(content, content.ParentId, false); // copy is not published, so property has value, but no tags have been created Assert.AreEqual("[\"hello\",\"world\"]", copy.GetValue(propAlias)); - var copiedTags = ServiceContext.TagService.GetTagsForEntity(copy.Id).ToArray(); + var copiedTags = TagService.GetTagsForEntity(copy.Id).ToArray(); Assert.AreEqual(0, copiedTags.Length); // publish - contentService.SaveAndPublish(copy); + ContentService.SaveAndPublish(copy); // now tags have been set (published) - copiedTags = ServiceContext.TagService.GetTagsForEntity(copy.Id).ToArray(); + copiedTags = TagService.GetTagsForEntity(copy.Id).ToArray(); Assert.AreEqual(2, copiedTags.Length); Assert.AreEqual("hello", copiedTags[0].Text); @@ -2044,16 +2005,14 @@ namespace Umbraco.Tests.Services public void Can_Rollback_Version_On_Content() { // Arrange - var contentService = ServiceContext.ContentService; - - var parent = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 2); + var parent = ContentService.GetById(NodeIdSeed + 3); Assert.IsFalse(parent.Published); - ServiceContext.ContentService.SaveAndPublish(parent); // publishing parent, so Text Page 2 can be updated. + ContentService.SaveAndPublish(parent); // publishing parent, so Text Page 2 can be updated. - var content = contentService.GetById(NodeDto.NodeIdSeed + 4); + var content = ContentService.GetById(NodeIdSeed + 4); Assert.IsFalse(content.Published); - var versions = contentService.GetVersions(NodeDto.NodeIdSeed + 4).ToList(); + var versions = ContentService.GetVersions(NodeIdSeed + 4).ToList(); Assert.AreEqual(1, versions.Count); var version1 = content.VersionId; @@ -2064,13 +2023,13 @@ namespace Umbraco.Tests.Services // non published = edited Assert.IsTrue(content.Edited); - contentService.SaveAndPublish(content); // new version + ContentService.SaveAndPublish(content); // new version var version2 = content.VersionId; Assert.AreNotEqual(version1, version2); Assert.IsTrue(content.Published); Assert.IsFalse(content.Edited); - Assert.AreEqual("Francis Doe", contentService.GetById(content.Id).GetValue("author")); // version2 author is Francis + Assert.AreEqual("Francis Doe", ContentService.GetById(content.Id).GetValue("author")); // version2 author is Francis Assert.AreEqual("Text Page 2 Updated", content.Name); Assert.AreEqual("Text Page 2 Updated", content.PublishName); @@ -2080,7 +2039,7 @@ namespace Umbraco.Tests.Services // is not actually 'edited' until changes have been saved Assert.IsFalse(content.Edited); - contentService.Save(content); // just save changes + ContentService.Save(content); // just save changes Assert.IsTrue(content.Edited); Assert.AreEqual("Text Page 2 ReUpdated", content.Name); @@ -2088,13 +2047,13 @@ namespace Umbraco.Tests.Services content.Name = "Text Page 2 ReReUpdated"; - contentService.SaveAndPublish(content); // new version + ContentService.SaveAndPublish(content); // new version var version3 = content.VersionId; Assert.AreNotEqual(version2, version3); Assert.IsTrue(content.Published); Assert.IsFalse(content.Edited); - Assert.AreEqual("Jane Doe", contentService.GetById(content.Id).GetValue("author")); // version3 author is Jane + Assert.AreEqual("Jane Doe", ContentService.GetById(content.Id).GetValue("author")); // version3 author is Jane Assert.AreEqual("Text Page 2 ReReUpdated", content.Name); Assert.AreEqual("Text Page 2 ReReUpdated", content.PublishName); @@ -2105,16 +2064,16 @@ namespace Umbraco.Tests.Services // version3, third and current published version // rollback all values to version1 - var rollback = contentService.GetById(NodeDto.NodeIdSeed + 4); - var rollto = contentService.GetVersion(version1); + var rollback = ContentService.GetById(NodeIdSeed + 4); + var rollto = ContentService.GetVersion(version1); rollback.CopyFrom(rollto); rollback.Name = rollto.Name; // must do it explicitly - contentService.Save(rollback); + ContentService.Save(rollback); Assert.IsNotNull(rollback); Assert.IsTrue(rollback.Published); Assert.IsTrue(rollback.Edited); - Assert.AreEqual("Francis Doe", contentService.GetById(content.Id).GetValue("author")); // author is now Francis again + Assert.AreEqual("Francis Doe", ContentService.GetById(content.Id).GetValue("author")); // author is now Francis again Assert.AreEqual(version3, rollback.VersionId); // same version but with edits // props and name have rolled back @@ -2127,11 +2086,11 @@ namespace Umbraco.Tests.Services // rollback all values to current version // special because... current has edits... this really is equivalent to rolling back to version2 - var rollback2 = contentService.GetById(NodeDto.NodeIdSeed + 4); - var rollto2 = contentService.GetVersion(version3); + var rollback2 = ContentService.GetById(NodeIdSeed + 4); + var rollto2 = ContentService.GetVersion(version3); rollback2.CopyFrom(rollto2); rollback2.Name = rollto2.PublishName; // must do it explicitely AND must pick the publish one! - contentService.Save(rollback2); + ContentService.Save(rollback2); Assert.IsTrue(rollback2.Published); Assert.IsFalse(rollback2.Edited); // all changes cleared! @@ -2140,19 +2099,19 @@ namespace Umbraco.Tests.Services Assert.AreEqual("Text Page 2 ReReUpdated", rollback2.Name); // test rollback to self, again - content = contentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.AreEqual("Text Page 2 ReReUpdated", content.Name); Assert.AreEqual("Jane Doe", content.GetValue("author")); - contentService.SaveAndPublish(content); + ContentService.SaveAndPublish(content); Assert.IsFalse(content.Edited); content.Name = "Xxx"; content.SetValue("author", "Bob Doe"); - contentService.Save(content); + ContentService.Save(content); Assert.IsTrue(content.Edited); - rollto = contentService.GetVersion(content.VersionId); + rollto = ContentService.GetVersion(content.VersionId); content.CopyFrom(rollto); content.Name = rollto.PublishName; // must do it explicitely AND must pick the publish one! - contentService.Save(content); + ContentService.Save(content); Assert.IsFalse(content.Edited); Assert.AreEqual("Text Page 2 ReReUpdated", content.Name); Assert.AreEqual("Jane Doe", content.GetValue("author")); @@ -2161,18 +2120,25 @@ namespace Umbraco.Tests.Services [Test] public void Can_Rollback_Version_On_Multilingual() { - var langFr = new Language(_globalSettings, "fr"); - var langDa = new Language(_globalSettings, "da"); - ServiceContext.LocalizationService.Save(langFr); - ServiceContext.LocalizationService.Save(langDa); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr") + .Build(); + var langDa = new LanguageBuilder() + .WithCultureInfo("da") + .Build(); + LocalizationService.Save(langFr); + LocalizationService.Save(langDa); - var contentType = MockedContentTypes.CreateSimpleContentType("multi", "Multi"); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("multi", "Multi", defaultTemplateId: template.Id); contentType.Key = new Guid("45FF9A70-9C5F-448D-A476-DCD23566BBF8"); contentType.Variations = ContentVariation.Culture; var p1 = contentType.PropertyTypes.First(); p1.Variations = ContentVariation.Culture; - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! - ServiceContext.ContentTypeService.Save(contentType); + FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! + ContentTypeService.Save(contentType); var page = new Content("Page", Constants.System.Root, contentType) { @@ -2185,26 +2151,26 @@ namespace Umbraco.Tests.Services page.SetCultureName("fr1", "fr"); page.SetCultureName("da1", "da"); - ServiceContext.ContentService.Save(page); + ContentService.Save(page); var versionId0 = page.VersionId; page.SetValue(p1.Alias, "v1fr", "fr"); page.SetValue(p1.Alias, "v1da", "da"); - ServiceContext.ContentService.SaveAndPublish(page); + ContentService.SaveAndPublish(page); var versionId1 = page.VersionId; Thread.Sleep(250); page.SetCultureName("fr2", "fr"); page.SetValue(p1.Alias, "v2fr", "fr"); - ServiceContext.ContentService.SaveAndPublish(page, "fr"); + ContentService.SaveAndPublish(page, "fr"); var versionId2 = page.VersionId; Thread.Sleep(250); page.SetCultureName("da2", "da"); page.SetValue(p1.Alias, "v2da", "da"); - ServiceContext.ContentService.SaveAndPublish(page, "da"); + ContentService.SaveAndPublish(page, "da"); var versionId3 = page.VersionId; Thread.Sleep(250); @@ -2213,12 +2179,12 @@ namespace Umbraco.Tests.Services page.SetCultureName("da3", "da"); page.SetValue(p1.Alias, "v3fr", "fr"); page.SetValue(p1.Alias, "v3da", "da"); - ServiceContext.ContentService.SaveAndPublish(page); + ContentService.SaveAndPublish(page); var versionId4 = page.VersionId; // now get all versions - var versions = ServiceContext.ContentService.GetVersions(page.Id).ToArray(); + var versions = ContentService.GetVersions(page.Id).ToArray(); Assert.AreEqual(5, versions.Length); @@ -2308,10 +2274,10 @@ namespace Umbraco.Tests.Services //page.SetCultureName("da4", "da"); page.SetValue(p1.Alias, "v4fr", "fr"); page.SetValue(p1.Alias, "v4da", "da"); - ServiceContext.ContentService.Save(page); + ContentService.Save(page); var versionId5 = page.VersionId; - versions = ServiceContext.ContentService.GetVersions(page.Id).ToArray(); + versions = ContentService.GetVersions(page.Id).ToArray(); // we just update the current version Assert.AreEqual(5, versions.Length); @@ -2326,7 +2292,7 @@ namespace Umbraco.Tests.Services } Console.WriteLine("-"); - var versionsSlim = ServiceContext.ContentService.GetVersionsSlim(page.Id, 0, 50).ToArray(); + var versionsSlim = ContentService.GetVersionsSlim(page.Id, 0, 50).ToArray(); Assert.AreEqual(5, versionsSlim.Length); for (var i = 0; i < 5; i++) @@ -2352,7 +2318,7 @@ namespace Umbraco.Tests.Services page.CopyFrom(versions[4], "fr"); // only the pure FR values page.CopyFrom(versions[4], null); // so, must explicitly do the INVARIANT values too page.SetCultureName(versions[4].GetPublishName("fr"), "fr"); - ServiceContext.ContentService.Save(page); + ContentService.Save(page); // and voila, rolled back! Assert.AreEqual(versions[4].GetPublishName("fr"), page.GetCultureName("fr")); @@ -2365,11 +2331,11 @@ namespace Umbraco.Tests.Services [Test] public void Can_Save_Lazy_Content() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); - var root = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 2); + var contentType = ContentTypeService.Get("umbTextpage"); + var root = ContentService.GetById(NodeIdSeed + 3); - 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 c = new Lazy(() => ContentBuilder.CreateSimpleContent(contentType, "Hierarchy Simple Text Page", root.Id)); + var c2 = new Lazy(() => ContentBuilder.CreateSimpleContent(contentType, "Hierarchy Simple Text Subpage", c.Value.Id)); var list = new List> {c, c2}; using (var scope = ScopeProvider.CreateScope()) @@ -2397,16 +2363,15 @@ namespace Umbraco.Tests.Services 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", Constants.System.Root); - contentService.Save(content); + var contentTypeService = ContentTypeService; + var contentType = ContentTypeBuilder.CreateAllTypesContentType("allDataTypes", "All DataTypes"); + ContentTypeService.Save(contentType); + var content = ContentBuilder.CreateAllTypesContent(contentType, "Random Content", Constants.System.Root); + ContentService.Save(content); var id = content.Id; // Act - var sut = contentService.GetById(id); + var sut = ContentService.GetById(id); // Arrange Assert.That(sut.GetValue("isTrue"), Is.True); @@ -2436,76 +2401,39 @@ namespace Umbraco.Tests.Services public void Can_Delete_Previous_Versions_Not_Latest() { // Arrange - var contentService = ServiceContext.ContentService; - var content = contentService.GetById(NodeDto.NodeIdSeed + 5); + var content = ContentService.GetById(NodeIdSeed + 6); var version = content.VersionId; // Act - contentService.DeleteVersion(NodeDto.NodeIdSeed + 5, version, true, Constants.Security.SuperUserId); - var sut = contentService.GetById(NodeDto.NodeIdSeed + 5); + ContentService.DeleteVersion(NodeIdSeed + 6, version, true, Constants.Security.SuperUserId); + var sut = ContentService.GetById(NodeIdSeed + 6); // Assert Assert.That(sut.VersionId, Is.EqualTo(version)); } - [Test] - public void Ensure_Content_Xml_Created() - { - var contentService = ServiceContext.ContentService; - var content = contentService.Create("Home US", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); - content.SetValue("author", "Barack Obama"); - - contentService.Save(content); - - using (var scope = ScopeProvider.CreateScope()) - { - Assert.IsFalse(scope.Database.Exists(content.Id)); - } - - contentService.SaveAndPublish(content); - - using (var scope = ScopeProvider.CreateScope()) - { - Assert.IsTrue(scope.Database.Exists(content.Id)); - } - } - - [Test] - public void Ensure_Preview_Xml_Created() - { - var contentService = ServiceContext.ContentService; - var content = contentService.Create("Home US", Constants.System.Root, "umbTextpage", Constants.Security.SuperUserId); - content.SetValue("author", "Barack Obama"); - - contentService.Save(content); - - using (var scope = ScopeProvider.CreateScope()) - { - Assert.IsTrue(scope.Database.SingleOrDefault("WHERE nodeId=@nodeId", new{nodeId = content.Id}) != null); - } - } - [Test] public void Can_Get_Paged_Children() { - var service = ServiceContext.ContentService; // Start by cleaning the "db" - var umbTextPage = service.GetById(new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); - service.Delete(umbTextPage); + var umbTextPage = ContentService.GetById(new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); + ContentService.Delete(umbTextPage, Constants.Security.SuperUserId); - var contentType = MockedContentTypes.CreateSimpleContentType(); - ServiceContext.ContentTypeService.Save(contentType); - for (int i = 0; i < 10; i++) + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType(defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); + for (var i = 0; i < 10; i++) { - var c1 = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(c1); + var c1 = ContentBuilder.CreateSimpleContent(contentType); + ContentService.Save(c1); } - long total; - var entities = service.GetPagedChildren(Constants.System.Root, 0, 6, out total).ToArray(); + var entities = ContentService.GetPagedChildren(Constants.System.Root, 0, 6, out var total).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); - entities = service.GetPagedChildren(Constants.System.Root, 1, 6, out total).ToArray(); + entities = ContentService.GetPagedChildren(Constants.System.Root, 1, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); } @@ -2513,42 +2441,43 @@ namespace Umbraco.Tests.Services [Test] public void Can_Get_Paged_Children_Dont_Get_Descendants() { - var service = ServiceContext.ContentService; // Start by cleaning the "db" - var umbTextPage = service.GetById(new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); - service.Delete(umbTextPage); + var umbTextPage = ContentService.GetById(new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); + ContentService.Delete(umbTextPage, Constants.Security.SuperUserId); - var contentType = MockedContentTypes.CreateSimpleContentType(); - ServiceContext.ContentTypeService.Save(contentType); + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType(defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); // only add 9 as we also add a content with children - for (int i = 0; i < 9; i++) + for (var i = 0; i < 9; i++) { - var c1 = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(c1); + var c1 = ContentBuilder.CreateSimpleContent(contentType); + ContentService.Save(c1); } - var willHaveChildren = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(willHaveChildren); - for (int i = 0; i < 10; i++) + var willHaveChildren = ContentBuilder.CreateSimpleContent(contentType); + ContentService.Save(willHaveChildren); + for (var i = 0; i < 10; i++) { - var c1 = MockedContent.CreateSimpleContent(contentType, "Content" + i, willHaveChildren.Id); - ServiceContext.ContentService.Save(c1); + var c1 = ContentBuilder.CreateSimpleContent(contentType, "Content" + i, willHaveChildren.Id); + ContentService.Save(c1); } - long total; // children in root including the folder - not the descendants in the folder - var entities = service.GetPagedChildren(Constants.System.Root, 0, 6, out total).ToArray(); + var entities = ContentService.GetPagedChildren(Constants.System.Root, 0, 6, out var total).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); - entities = service.GetPagedChildren(Constants.System.Root, 1, 6, out total).ToArray(); + entities = ContentService.GetPagedChildren(Constants.System.Root, 1, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); // children in folder - entities = service.GetPagedChildren(willHaveChildren.Id, 0, 6, out total).ToArray(); + entities = ContentService.GetPagedChildren(willHaveChildren.Id, 0, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); - entities = service.GetPagedChildren(willHaveChildren.Id, 1, 6, out total).ToArray(); + entities = ContentService.GetPagedChildren(willHaveChildren.Id, 1, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); } @@ -2570,49 +2499,48 @@ namespace Umbraco.Tests.Services contentType.PropertyGroups.Add(new PropertyGroup(properties) { Name = "content" }); contentType.SetDefaultTemplate(new Template(ShortStringHelper, "Textpage", "textpage")); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! - ServiceContext.ContentTypeService.Save(contentType); + FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! + ContentTypeService.Save(contentType); - var contentService = ServiceContext.ContentService; - var content = contentService.Create("foo", Constants.System.Root, "foo"); - contentService.Save(content); + var content = ContentService.Create("foo", Constants.System.Root, "foo"); + ContentService.Save(content); Assert.IsFalse(content.Published); Assert.IsTrue(content.Edited); - content = contentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsFalse(content.Published); Assert.IsTrue(content.Edited); content.SetValue("title", "foo"); Assert.IsTrue(content.Edited); - contentService.Save(content); + ContentService.Save(content); Assert.IsFalse(content.Published); Assert.IsTrue(content.Edited); - content = contentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsFalse(content.Published); Assert.IsTrue(content.Edited); - var versions = contentService.GetVersions(content.Id); + var versions = ContentService.GetVersions(content.Id); Assert.AreEqual(1, versions.Count()); // publish content // becomes Published, !Edited // creates a new version // can get published property values - contentService.SaveAndPublish(content); + ContentService.SaveAndPublish(content); Assert.IsTrue(content.Published); Assert.IsFalse(content.Edited); - content = contentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsTrue(content.Published); Assert.IsFalse(content.Edited); - versions = contentService.GetVersions(content.Id); + versions = ContentService.GetVersions(content.Id); Assert.AreEqual(2, versions.Count()); Assert.AreEqual("foo", content.GetValue("title", published: true)); @@ -2620,7 +2548,7 @@ namespace Umbraco.Tests.Services // unpublish content // becomes !Published, Edited - contentService.Unpublish(content); + ContentService.Unpublish(content); Assert.IsFalse(content.Published); Assert.IsTrue(content.Edited); @@ -2631,7 +2559,7 @@ namespace Umbraco.Tests.Services var vpk = ((Content) content).VersionId; var ppk = ((Content) content).PublishedVersionId; - content = contentService.GetById(content.Id); + content = ContentService.GetById(content.Id); Assert.IsFalse(content.Published); Assert.IsTrue(content.Edited); @@ -2648,14 +2576,14 @@ namespace Umbraco.Tests.Services Assert.AreEqual("foo", content.GetValue("title", published: true)); // still there Assert.AreEqual("foo", content.GetValue("title")); - versions = contentService.GetVersions(content.Id); + versions = ContentService.GetVersions(content.Id); Assert.AreEqual(2, versions.Count()); // ah - we have a problem here - since we're not published we don't have published values // and therefore we cannot "just" republish the content - we need to publish some values // so... that's not really an option // - //contentService.SaveAndPublish(content); + //ContentService.SaveAndPublish(content); // FIXME: what shall we do of all this? /* @@ -2663,50 +2591,54 @@ namespace Umbraco.Tests.Services // what if it never was published? // what if it has changes? // do we want to "publish" only some variants, or the entire content? - contentService.Publish(content); + ContentService.Publish(content); Assert.IsTrue(content.Published); Assert.IsFalse(content.Edited); // FIXME: should it be 2 or 3 - versions = contentService.GetVersions(content.Id); + versions = ContentService.GetVersions(content.Id); Assert.AreEqual(2, versions.Count()); // FIXME: now test rollbacks - var version = contentService.GetByVersion(content.Id); // test that it gets a version - should be GetVersion - var previousVersion = contentService.GetVersions(content.Id).Skip(1).FirstOrDefault(); // need an optimized way to do this + var version = ContentService.GetByVersion(content.Id); // test that it gets a version - should be GetVersion + var previousVersion = ContentService.GetVersions(content.Id).Skip(1).FirstOrDefault(); // need an optimized way to do this content.CopyValues(version); // copies the edited value - always content.Template = version.Template; content.Name = version.Name; - contentService.Save(content); // this is effectively a rollback? - contentService.Rollback(content); // just kill the method and offer options on values + template + name... + ContentService.Save(content); // this is effectively a rollback? + ContentService.Rollback(content); // just kill the method and offer options on values + template + name... */ } [Test] public void Ensure_Invariant_Name() { - var languageService = ServiceContext.LocalizationService; + var languageService = LocalizationService; - var langUk = new Language(_globalSettings, "en-GB") { IsDefault = true }; - var langFr = new Language(_globalSettings, "fr-FR"); + var langUk = new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); languageService.Save(langFr); languageService.Save(langUk); - var contentTypeService = ServiceContext.ContentTypeService; + var contentTypeService = ContentTypeService; - var contentType = contentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); contentType.Variations = ContentVariation.Culture; contentType.AddPropertyType(new PropertyType(ShortStringHelper, Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Nvarchar, "prop") { Variations = ContentVariation.Culture }); - contentTypeService.Save(contentType); + ContentTypeService.Save(contentType); - var contentService = ServiceContext.ContentService; var content = new Content(null, Constants.System.Root, contentType); content.SetCultureName("name-us", langUk.IsoCode); content.SetCultureName("name-fr", langFr.IsoCode); - contentService.Save(content); + ContentService.Save(content); //the name will be set to the default culture variant name Assert.AreEqual("name-us", content.Name); @@ -2714,43 +2646,46 @@ namespace Umbraco.Tests.Services // FIXME: should we always sync the invariant name even on update? see EnsureInvariantNameValues ////updating the default culture variant name should also update the invariant name so they stay in sync //content.SetName("name-us-2", langUk.IsoCode); - //contentService.Save(content); + //ContentService.Save(content); //Assert.AreEqual("name-us-2", content.Name); } [Test] public void Ensure_Unique_Culture_Names() { - var languageService = ServiceContext.LocalizationService; + var languageService = LocalizationService; - var langUk = new Language(_globalSettings, "en-GB") { IsDefault = true }; - var langFr = new Language(_globalSettings, "fr-FR"); + var langUk = new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); languageService.Save(langFr); languageService.Save(langUk); - var contentTypeService = ServiceContext.ContentTypeService; + var contentTypeService = ContentTypeService; - var contentType = contentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); contentType.Variations = ContentVariation.Culture; - contentTypeService.Save(contentType); - - var contentService = ServiceContext.ContentService; + ContentTypeService.Save(contentType); var content = new Content(null, Constants.System.Root, contentType); content.SetCultureName("root", langUk.IsoCode); - contentService.Save(content); + ContentService.Save(content); for (var i = 0; i < 5; i++) { var child = new Content(null, content, contentType); child.SetCultureName("child", langUk.IsoCode); - contentService.Save(child); + ContentService.Save(child); Assert.AreEqual("child" + (i == 0 ? "" : " (" + i + ")"), child.GetCultureName(langUk.IsoCode)); //Save it again to ensure that the unique check is not performed again against it's own name - contentService.Save(child); + ContentService.Save(child); Assert.AreEqual("child" + (i == 0 ? "" : " (" + i + ")"), child.GetCultureName(langUk.IsoCode)); } } @@ -2758,23 +2693,29 @@ namespace Umbraco.Tests.Services [Test] public void Can_Get_Paged_Children_WithFilterAndOrder() { - var languageService = ServiceContext.LocalizationService; + var languageService = LocalizationService; - var langUk = new Language(_globalSettings, "en-GB") { IsDefault = true }; - var langFr = new Language(_globalSettings, "fr-FR"); - var langDa = new Language(_globalSettings, "da-DK"); + var langUk = new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .WithIsMandatory(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); + var langDa = new LanguageBuilder() + .WithCultureInfo("da-DK") + .Build(); languageService.Save(langFr); languageService.Save(langUk); languageService.Save(langDa); - var contentTypeService = ServiceContext.ContentTypeService; + var contentTypeService = ContentTypeService; - var contentType = contentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); contentType.Variations = ContentVariation.Culture; - contentTypeService.Save(contentType); - - var contentService = ServiceContext.ContentService; + ContentTypeService.Save(contentType); var o = new[] { 2, 1, 3, 0, 4 }; // randomly different for (var i = 0; i < 5; i++) @@ -2783,17 +2724,17 @@ namespace Umbraco.Tests.Services contentA.SetCultureName("contentA" + i + "uk", langUk.IsoCode); contentA.SetCultureName("contentA" + o[i] + "fr", langFr.IsoCode); contentA.SetCultureName("contentX" + i + "da", langDa.IsoCode); - contentService.Save(contentA); + ContentService.Save(contentA); var contentB = new Content(null, Constants.System.Root, contentType); contentB.SetCultureName("contentB" + i + "uk", langUk.IsoCode); contentB.SetCultureName("contentB" + o[i] + "fr", langFr.IsoCode); contentB.SetCultureName("contentX" + i + "da", langDa.IsoCode); - contentService.Save(contentB); + ContentService.Save(contentB); } // get all - var list = contentService.GetPagedChildren(Constants.System.Root, 0, 100, out var total).ToList(); + var list = ContentService.GetPagedChildren(Constants.System.Root, 0, 100, out var total).ToList(); Console.WriteLine("ALL"); WriteList(list); @@ -2802,17 +2743,19 @@ namespace Umbraco.Tests.Services Assert.AreEqual(11, total); Assert.AreEqual(11, list.Count); + var sqlContext = GetRequiredService(); + // filter - list = contentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, - SqlContext.Query().Where(x => x.Name.Contains("contentX")), + list = ContentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, + sqlContext.Query().Where(x => x.Name.Contains("contentX")), Ordering.By("name", culture: langFr.IsoCode)).ToList(); Assert.AreEqual(0, total); Assert.AreEqual(0, list.Count); // filter - list = contentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, - SqlContext.Query().Where(x => x.Name.Contains("contentX")), + list = ContentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, + sqlContext.Query().Where(x => x.Name.Contains("contentX")), Ordering.By("name", culture: langDa.IsoCode)).ToList(); Console.WriteLine("FILTER BY NAME da:'contentX'"); @@ -2822,8 +2765,8 @@ namespace Umbraco.Tests.Services Assert.AreEqual(10, list.Count); // filter - list = contentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, - SqlContext.Query().Where(x => x.Name.Contains("contentA")), + list = ContentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, + sqlContext.Query().Where(x => x.Name.Contains("contentA")), Ordering.By("name", culture: langFr.IsoCode)).ToList(); Console.WriteLine("FILTER BY NAME fr:'contentA', ORDER ASC"); @@ -2835,8 +2778,8 @@ namespace Umbraco.Tests.Services for (var i = 0; i < 5; i++) Assert.AreEqual("contentA" + i + "fr", list[i].GetCultureName(langFr.IsoCode)); - list = contentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, - SqlContext.Query().Where(x => x.Name.Contains("contentA")), + list = ContentService.GetPagedChildren(Constants.System.Root, 0, 100, out total, + sqlContext.Query().Where(x => x.Name.Contains("contentA")), Ordering.By("name", direction: Direction.Descending, culture: langFr.IsoCode)).ToList(); Console.WriteLine("FILTER BY NAME fr:'contentA', ORDER DESC"); @@ -2859,35 +2802,41 @@ namespace Umbraco.Tests.Services [Test] public void Can_SaveRead_Variations() { - var languageService = ServiceContext.LocalizationService; - - //var langFr = new Language("fr-FR") { IsDefaultVariantLanguage = true }; - var langXx = new Language(_globalSettings, "pt-PT") { IsDefault = true }; - var langFr = new Language(_globalSettings, "fr-FR"); - var langUk = new Language(_globalSettings, "en-GB"); - var langDe = new Language(_globalSettings, "de-DE"); + var languageService = LocalizationService; + var langPt = new LanguageBuilder() + .WithCultureInfo("pt-PT") + .WithIsDefault(true) + .Build(); + var langFr = new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); + var langUk = new LanguageBuilder() + .WithCultureInfo("en-GB") + .Build(); + var langDe = new LanguageBuilder() + .WithCultureInfo("de-DE") + .Build(); languageService.Save(langFr); languageService.Save(langUk); languageService.Save(langDe); - var contentTypeService = ServiceContext.ContentTypeService; + var contentTypeService = ContentTypeService; - var contentType = contentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); contentType.Variations = ContentVariation.Culture; contentType.AddPropertyType(new PropertyType(ShortStringHelper, Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Nvarchar, "prop") { Variations = ContentVariation.Culture }); // FIXME: add test w/ an invariant prop - contentTypeService.Save(contentType); + ContentTypeService.Save(contentType); - var contentService = ServiceContext.ContentService; - var content = contentService.Create("Home US", Constants.System.Root, "umbTextpage"); + var content = ContentService.Create("Home US", Constants.System.Root, "umbTextpage"); // creating content with a name but no culture - will set the invariant name // but, because that content is variant, as soon as we save, we'll need to // replace the invariant name with whatever we have in cultures - always // // in fact, that would throw, because there is no name - //contentService.Save(content); + //ContentService.Save(content); // act @@ -2896,12 +2845,12 @@ namespace Umbraco.Tests.Services content.SetValue("prop", "value-uk1", langUk.IsoCode); content.SetCultureName("name-fr", langFr.IsoCode); // and then we can save content.SetCultureName("name-uk", langUk.IsoCode); - contentService.Save(content); + ContentService.Save(content); // content has been saved, // it has names, but no publishNames, and no published cultures - var content2 = contentService.GetById(content.Id); + var content2 = ContentService.GetById(content.Id); Assert.AreEqual("name-fr", content2.Name); // got the default culture name when saved Assert.AreEqual("name-fr", content2.GetCultureName(langFr.IsoCode)); @@ -2930,13 +2879,13 @@ namespace Umbraco.Tests.Services // act - contentService.SaveAndPublish(content, new[]{ langFr.IsoCode, langUk.IsoCode }); + ContentService.SaveAndPublish(content, new[]{ langFr.IsoCode, langUk.IsoCode }); // both FR and UK have been published, // and content has been published, // it has names, publishNames, and published cultures - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); Assert.AreEqual("name-fr", content2.Name); // got the default culture name when saved Assert.AreEqual("name-fr", content2.GetCultureName(langFr.IsoCode)); @@ -2975,11 +2924,11 @@ namespace Umbraco.Tests.Services // act - contentService.SaveAndPublish(content); + ContentService.SaveAndPublish(content); // now it has publish name for invariant neutral - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); Assert.AreEqual("name-fr", content2.PublishName); @@ -2992,12 +2941,12 @@ namespace Umbraco.Tests.Services content.SetValue("author", "Barack Obama2"); content.SetValue("prop", "value-fr2", langFr.IsoCode); content.SetValue("prop", "value-uk2", langUk.IsoCode); - contentService.Save(content); + ContentService.Save(content); // content has been saved, // it has updated names, unchanged publishNames, and published cultures - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); Assert.AreEqual("name-fr2", content2.Name); // got the default culture name when saved Assert.AreEqual("name-fr2", content2.GetCultureName(langFr.IsoCode)); @@ -3034,13 +2983,13 @@ namespace Umbraco.Tests.Services // act // cannot just 'save' since we are changing what's published! - contentService.Unpublish(content, langFr.IsoCode); + ContentService.Unpublish(content, langFr.IsoCode); // content has been published, // the french culture is gone // (only if french is not mandatory, else everything would be gone!) - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); Assert.AreEqual("name-fr2", content2.Name); // got the default culture name when saved Assert.AreEqual("name-fr2", content2.GetCultureName(langFr.IsoCode)); @@ -3076,7 +3025,7 @@ namespace Umbraco.Tests.Services // act - contentService.Unpublish(content); + ContentService.Unpublish(content); // content has been unpublished, // but properties, names, etc. retain their 'published' values so the content @@ -3088,7 +3037,7 @@ namespace Umbraco.Tests.Services // values even though the content is not published - hence many things being // non-null or true below - always check against content.Published to be sure - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); Assert.IsFalse(content2.Published); @@ -3127,12 +3076,12 @@ namespace Umbraco.Tests.Services //TODO: This is using an internal API - the test can't pass without this but we want to keep the test here // will need stephane to have a look at this test at some stage since there is a lot of logic here that we // want to keep on testing but don't need the public API to do these more complicated things. - ((ContentService)contentService).CommitDocumentChanges(content); + ContentService.CommitDocumentChanges(content); // content has been re-published, // everything is back to what it was before being unpublished - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); Assert.IsTrue(content2.Published); @@ -3167,9 +3116,9 @@ namespace Umbraco.Tests.Services // act - contentService.SaveAndPublish(content, langUk.IsoCode); + ContentService.SaveAndPublish(content, langUk.IsoCode); - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); // no change AssertPerCulture(content, (x, c) => x.IsCultureAvailable(c), (langFr, true), (langUk, true), (langDe, false)); @@ -3190,9 +3139,9 @@ namespace Umbraco.Tests.Services // act content.SetCultureName("name-uk3", langUk.IsoCode); - contentService.Save(content); + ContentService.Save(content); - content2 = contentService.GetById(content.Id); + content2 = ContentService.GetById(content.Id); // note that the 'edited' flags only change once saved - not immediately // but they change, on what's being saved, and when getting it back @@ -3214,14 +3163,14 @@ namespace Umbraco.Tests.Services private IEnumerable CreateContentHierarchy() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); - var root = ServiceContext.ContentService.GetById(NodeDto.NodeIdSeed + 2); + var contentType = ContentTypeService.Get("umbTextpage"); + var root = ContentService.GetById(NodeIdSeed + 3); var list = new List(); - for (int i = 0; i < 10; i++) + for (var i = 0; i < 10; i++) { - var content = MockedContent.CreateSimpleContent(contentType, "Hierarchy Simple Text Page " + i, root); + var content = ContentBuilder.CreateSimpleContent(contentType, "Hierarchy Simple Text Page " + i, root); list.Add(content); list.AddRange(CreateChildrenOf(contentType, content, 4)); @@ -3235,9 +3184,9 @@ namespace Umbraco.Tests.Services private IEnumerable CreateChildrenOf(IContentType contentType, IContent content, int depth) { var list = new List(); - for (int i = 0; i < depth; i++) + for (var i = 0; i < depth; i++) { - var c = MockedContent.CreateSimpleContent(contentType, "Hierarchy Simple Text Subpage " + i, content); + var c = ContentBuilder.CreateSimpleContent(contentType, "Hierarchy Simple Text Subpage " + i, content); list.Add(c); Debug.Print("Created: 'Hierarchy Simple Text Subpage {0}' - Depth: {1}", i, depth); @@ -3247,11 +3196,14 @@ namespace Umbraco.Tests.Services private DocumentRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { + var globalSettings = new GlobalSettings(); var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); + var fileSystems = GetMockFileSystems(); + + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), fileSystems, IOHelper, ShortStringHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger()); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches, ShortStringHelper); - var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), Microsoft.Extensions.Options.Options.Create(_globalSettings)); + var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), Microsoft.Extensions.Options.Options.Create(globalSettings)); contentTypeRepository = new ContentTypeRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), commonRepository, languageRepository, ShortStringHelper); var relationTypeRepository = new RelationTypeRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger()); var entityRepository = new EntityRepository(accessor); @@ -3264,14 +3216,19 @@ namespace Umbraco.Tests.Services private void CreateEnglishAndFrenchDocumentType(out Language langUk, out Language langFr, out ContentType contentType) { - langUk = new Language(_globalSettings, "en-GB") { IsDefault = true }; - langFr = new Language(_globalSettings, "fr-FR"); - ServiceContext.LocalizationService.Save(langFr); - ServiceContext.LocalizationService.Save(langUk); + langUk = (Language)new LanguageBuilder() + .WithCultureInfo("en-GB") + .WithIsDefault(true) + .Build(); + langFr = (Language)new LanguageBuilder() + .WithCultureInfo("fr-FR") + .Build(); + LocalizationService.Save(langFr); + LocalizationService.Save(langUk); - contentType = MockedContentTypes.CreateBasicContentType(); + contentType = ContentTypeBuilder.CreateBasicContentType(); contentType.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); } private IContent CreateEnglishAndFrenchDocument(out Language langUk, out Language langFr, out ContentType contentType) diff --git a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs index 968705f848..70fc9764f0 100644 --- a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs +++ b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs @@ -289,7 +289,6 @@ namespace Umbraco.Tests.Integration.Testing #region LocalDb - private static readonly object _dbLocker = new object(); private static LocalDbTestDatabase _dbInstance; @@ -479,6 +478,15 @@ namespace Umbraco.Tests.Integration.Testing protected GlobalSettings GlobalSettings => Services.GetRequiredService>().Value; protected IMapperCollection Mappers => Services.GetRequiredService(); + protected IFileSystems GetMockFileSystems() + { + var testHelper = new TestHelper(); + var fileSystems = Mock.Of(); + var viewsFileSystem = new PhysicalFileSystem(IOHelper, testHelper.GetHostingEnvironment(), LoggerFactory.CreateLogger(), Constants.SystemDirectories.MvcViews); + Mock.Get(fileSystems).Setup(x => x.MvcViewsFileSystem).Returns(viewsFileSystem); + return fileSystems; + } + #endregion #region Builders diff --git a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTestWithContent.cs b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTestWithContent.cs new file mode 100644 index 0000000000..c6f5d538ce --- /dev/null +++ b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTestWithContent.cs @@ -0,0 +1,54 @@ +using System; +using Umbraco.Core.Services; +using Umbraco.Core.Services.Implement; +using Umbraco.Tests.Common.Builders; + +namespace Umbraco.Tests.Integration.Testing +{ + public abstract class UmbracoIntegrationTestWithContent : UmbracoIntegrationTest + { + protected IContentTypeService ContentTypeService => GetRequiredService(); + protected IFileService FileService => GetRequiredService(); + protected ContentService ContentService => (ContentService)GetRequiredService(); + + protected int NodeIdSeed => 1050; + + public override void Setup() + { + base.Setup(); + CreateTestData(); + } + + public virtual void CreateTestData() + { + //NOTE Maybe not the best way to create/save test data as we are using the services, which are being tested. + + // Create and Save ContentType "umbTextpage" -> 1051 (template), 1052 (content type) + var template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id); + contentType.Key = new Guid("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"); + ContentTypeService.Save(contentType); + + // Create and Save Content "Homepage" based on "umbTextpage" -> 1053 + var textpage = ContentBuilder.CreateSimpleContent(contentType); + textpage.Key = new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0"); + ContentService.Save(textpage, 0); + + // Create and Save Content "Text Page 1" based on "umbTextpage" -> 1054 + var subpage = ContentBuilder.CreateSimpleContent(contentType, "Text Page 1", textpage.Id); + subpage.ContentSchedule.Add(DateTime.Now.AddMinutes(-5), null); + ContentService.Save(subpage, 0); + + // Create and Save Content "Text Page 1" based on "umbTextpage" -> 1055 + var subpage2 = ContentBuilder.CreateSimpleContent(contentType, "Text Page 2", textpage.Id); + ContentService.Save(subpage2, 0); + + // Create and Save Content "Text Page Deleted" based on "umbTextpage" -> 1056 + var trashed = ContentBuilder.CreateSimpleContent(contentType, "Text Page Deleted", -20); + trashed.Trashed = true; + ContentService.Save(trashed, 0); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs index 5f965af386..b96d937c72 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models { @@ -21,6 +22,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models public void Can_Deep_Clone() { var item = _builder + .WithId(1) .WithParentObjectType(Guid.NewGuid()) .WithChildObjectType(Guid.NewGuid()) .Build(); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 8f92cb7167..414228b59f 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -152,6 +152,7 @@ + @@ -318,9 +319,7 @@ - - True