diff --git a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs index 4eb4d185e7..601a12ac1c 100644 --- a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs +++ b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs @@ -1,11 +1,12 @@ using System; using Examine; +using Microsoft.Extensions.Options; using Umbraco.Core.Cache; using Umbraco.Core.Composing; using Umbraco.Core.Composing.CompositionExtensions; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Grid; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Dashboards; using Umbraco.Core.Dictionary; using Umbraco.Core.Events; @@ -18,7 +19,6 @@ using Umbraco.Core.Migrations; using Umbraco.Core.Migrations.Install; using Umbraco.Core.Migrations.PostMigrations; using Umbraco.Core.Models.PublishedContent; -using Umbraco.Core.Templates; using Umbraco.Core.Persistence; using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.Validators; @@ -29,6 +29,7 @@ using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; using Umbraco.Core.Strings; using Umbraco.Core.Sync; +using Umbraco.Core.Templates; using Umbraco.Examine; using Umbraco.Infrastructure.Examine; using Umbraco.Infrastructure.Media; @@ -41,6 +42,7 @@ using Umbraco.Web.Features; using Umbraco.Web.HealthCheck; using Umbraco.Web.HealthCheck.NotificationMethods; using Umbraco.Web.Install; +using Umbraco.Web.Media; using Umbraco.Web.Media.EmbedProviders; using Umbraco.Web.Migrations.PostMigrations; using Umbraco.Web.Models.PublishedContent; @@ -55,10 +57,8 @@ using Umbraco.Web.Templates; using Umbraco.Web.Trees; using IntegerValidator = Umbraco.Core.PropertyEditors.Validators.IntegerValidator; using TextStringValueConverter = Umbraco.Core.PropertyEditors.ValueConverters.TextStringValueConverter; -using Umbraco.Core.Configuration.Models; -using Microsoft.Extensions.Options; using Microsoft.Extensions.Logging; -using Umbraco.Web.Media; + namespace Umbraco.Core.Runtime { @@ -206,13 +206,6 @@ namespace Umbraco.Core.Runtime // Config manipulator composition.RegisterUnique(); - - // register the http context and umbraco context accessors - // we *should* use the HttpContextUmbracoContextAccessor, however there are cases when - // we have no http context, eg when booting Umbraco or in background threads, so instead - // let's use an hybrid accessor that can fall back to a ThreadStatic context. - composition.RegisterUnique(); - // register the umbraco context factory // composition.RegisterUnique(); composition.RegisterUnique(); @@ -355,7 +348,6 @@ namespace Umbraco.Core.Runtime return new PublishedContentQuery(umbCtx.UmbracoContext.PublishedSnapshot, factory.GetInstance(), factory.GetInstance()); }, Lifetime.Request); - composition.RegisterUnique(); // register the http context and umbraco context accessors diff --git a/src/Umbraco.Tests.Common/Builders/UserGroupBuilder.cs b/src/Umbraco.Tests.Common/Builders/UserGroupBuilder.cs index 6bdc766ee2..a5a96786ce 100644 --- a/src/Umbraco.Tests.Common/Builders/UserGroupBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/UserGroupBuilder.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.Common.Builders private string _icon; private string _name; private IEnumerable _permissions = Enumerable.Empty(); - private IEnumerable _sectionCollection = Enumerable.Empty(); + private IEnumerable _allowedSections = Enumerable.Empty(); private string _suffix; private int? _startContentId; private int? _startMediaId; @@ -55,7 +55,7 @@ namespace Umbraco.Tests.Common.Builders public UserGroupBuilder WithPermissions(string permissions) { - _permissions = permissions.Split(); + _permissions = permissions.ToCharArray().Select(x => x.ToString()); return this; } @@ -65,6 +65,12 @@ namespace Umbraco.Tests.Common.Builders return this; } + public UserGroupBuilder WithAllowedSections(IList allowedSections) + { + _allowedSections = allowedSections; + return this; + } + public UserGroupBuilder WithStartContentId(int startContentId) { _startContentId = startContentId; @@ -107,9 +113,9 @@ namespace Umbraco.Tests.Common.Builders userGroup.StartContentId = startContentId; userGroup.StartMediaId = startMediaId; - foreach (var item in _sectionCollection) + foreach (var section in _allowedSections) { - userGroup.AddAllowedSection(item); + userGroup.AddAllowedSection(section); } return userGroup; diff --git a/src/Umbraco.Tests.Common/TestHelpers/Entities/MockedUser.cs b/src/Umbraco.Tests.Common/TestHelpers/Entities/MockedUser.cs deleted file mode 100644 index 5b77909fec..0000000000 --- a/src/Umbraco.Tests.Common/TestHelpers/Entities/MockedUser.cs +++ /dev/null @@ -1,62 +0,0 @@ -using Moq; -using System; -using System.Collections.Generic; -using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Models.Membership; - -namespace Umbraco.Tests.Common.TestHelpers.Entities -{ - public static class MockedUser - { - /// - /// Returns a and ensures that the ToUserCache and FromUserCache methods are mapped correctly for - /// dealing with start node caches - /// - /// - public static Mock GetUserMock() - { - var userCache = new Dictionary(); - var userMock = new Mock(); - userMock.Setup(x => x.FromUserCache(It.IsAny())).Returns((string key) => userCache.TryGetValue(key, out var val) ? val is int[] iVal ? iVal : null : null); - userMock.Setup(x => x.ToUserCache(It.IsAny(), It.IsAny())).Callback((string key, int[] val) => userCache[key] = val); - return userMock; - } - - public static User CreateUser(string suffix = "") - { - var globalSettings = new GlobalSettings(); - var user = new User(globalSettings) - { - Language = "en", - IsApproved = true, - Name = "TestUser" + suffix, - RawPasswordValue = "testing", - IsLockedOut = false, - Email = "test" + suffix + "@test.com", - Username = "TestUser" + suffix - }; - - return user; - } - - public static IEnumerable CreateMulipleUsers(int amount, Action onCreating = null) - { - var list = new List(); - - var globalSettings = new GlobalSettings(); - for (var i = 0; i < amount; i++) - { - var name = "Member No-" + i; - var user = new User(globalSettings, name, "test" + i + "@test.com", "test" + i, "test" + i); - - onCreating?.Invoke(i, user); - - user.ResetDirtyProperties(false); - - list.Add(user); - } - - return list; - } - } -} diff --git a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs b/src/Umbraco.Tests.Integration/Packaging/CreatedPackagesRepositoryTests.cs similarity index 81% rename from src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs rename to src/Umbraco.Tests.Integration/Packaging/CreatedPackagesRepositoryTests.cs index 7eb736ca42..2500dd97a4 100644 --- a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs +++ b/src/Umbraco.Tests.Integration/Packaging/CreatedPackagesRepositoryTests.cs @@ -6,40 +6,51 @@ using System.Linq; using System.Xml.Linq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Hosting; using Umbraco.Core.Models.Packaging; using Umbraco.Core.Packaging; using Umbraco.Core.Services; -using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; namespace Umbraco.Tests.Packaging { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)] - public class CreatedPackagesRepositoryTests : TestWithDatabaseBase + public class CreatedPackagesRepositoryTests : UmbracoIntegrationTest { private Guid _testBaseFolder; - public override void SetUp() + [SetUp] + public void SetupTestData() { - base.SetUp(); _testBaseFolder = Guid.NewGuid(); } - public override void TearDown() + [TearDown] + public void DeleteTestFolder() { - base.TearDown(); - //clear out files/folders - Directory.Delete(IOHelper.MapPath("~/" + _testBaseFolder), true); + Directory.Delete(HostingEnvironment.MapPathContentRoot("~/" + _testBaseFolder), true); } + private IContentService ContentService => GetRequiredService(); + private IContentTypeService ContentTypeService => GetRequiredService(); + private IDataTypeService DataTypeService => GetRequiredService(); + private IFileService FileService => GetRequiredService(); + private IMacroService MacroService => GetRequiredService(); + private ILocalizationService LocalizationService => GetRequiredService(); + private IEntityXmlSerializer EntityXmlSerializer => GetRequiredService(); + private IHostingEnvironment HostingEnvironment => GetRequiredService(); + private IUmbracoVersion UmbracoVersion => GetRequiredService(); + public ICreatedPackagesRepository PackageBuilder => new PackagesRepository( - ServiceContext.ContentService, ServiceContext.ContentTypeService, ServiceContext.DataTypeService, - ServiceContext.FileService, ServiceContext.MacroService, ServiceContext.LocalizationService, + ContentService, ContentTypeService, DataTypeService, + FileService, MacroService, LocalizationService, HostingEnvironment, - Factory.GetInstance(), LoggerFactory, + EntityXmlSerializer, LoggerFactory, UmbracoVersion, Microsoft.Extensions.Options.Options.Create(new GlobalSettings()), "createdPackages.config", diff --git a/src/Umbraco.Tests.Integration/Packaging/Packages/Document_Type_Picker_1.1.umb b/src/Umbraco.Tests.Integration/Packaging/Packages/Document_Type_Picker_1.1.umb new file mode 100644 index 0000000000..18449bd373 Binary files /dev/null and b/src/Umbraco.Tests.Integration/Packaging/Packages/Document_Type_Picker_1.1.umb differ diff --git a/src/Umbraco.Tests.Integration/Services/AuditServiceTests.cs b/src/Umbraco.Tests.Integration/Services/AuditServiceTests.cs index 9a0ba54082..474229372c 100644 --- a/src/Umbraco.Tests.Integration/Services/AuditServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/AuditServiceTests.cs @@ -9,7 +9,7 @@ using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Services +namespace Umbraco.Tests.Integration.Services { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] diff --git a/src/Umbraco.Tests/Services/CachedDataTypeServiceTests.cs b/src/Umbraco.Tests.Integration/Services/CachedDataTypeServiceTests.cs similarity index 55% rename from src/Umbraco.Tests/Services/CachedDataTypeServiceTests.cs rename to src/Umbraco.Tests.Integration/Services/CachedDataTypeServiceTests.cs index 38252c1faf..c0853eac6e 100644 --- a/src/Umbraco.Tests/Services/CachedDataTypeServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/CachedDataTypeServiceTests.cs @@ -2,6 +2,8 @@ using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; namespace Umbraco.Tests.Services @@ -12,8 +14,12 @@ namespace Umbraco.Tests.Services [TestFixture] [Apartment(ApartmentState.STA)] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class CachedDataTypeServiceTests : TestWithSomeContentBase + public class CachedDataTypeServiceTests : UmbracoIntegrationTest { + private IDataTypeService DataTypeService => GetRequiredService(); + private ILocalizedTextService LocalizedTextService => GetRequiredService(); + private ILocalizationService LocalizationService => GetRequiredService(); + /// /// This tests validates that with the new scope changes that the underlying cache policies work - in this case it tests that the cache policy /// with Count verification works. @@ -21,15 +27,13 @@ namespace Umbraco.Tests.Services [Test] public void DataTypeService_Can_Get_All() { - var dataTypeService = ServiceContext.DataTypeService; - - IDataType dataType = new DataType(new LabelPropertyEditor(LoggerFactory, IOHelper, DataTypeService,LocalizedTextService, LocalizationService, ShortStringHelper)) { Name = "Testing Textfield", DatabaseType = ValueStorageType.Ntext }; - dataTypeService.Save(dataType); + IDataType dataType = new DataType(new LabelPropertyEditor(LoggerFactory, IOHelper, DataTypeService, LocalizedTextService, LocalizationService, ShortStringHelper)) { Name = "Testing Textfield", DatabaseType = ValueStorageType.Ntext }; + DataTypeService.Save(dataType); //Get all the first time (no cache) - var all = dataTypeService.GetAll(); + var all = DataTypeService.GetAll(); //Get all a second time (with cache) - all = dataTypeService.GetAll(); + all = DataTypeService.GetAll(); Assert.Pass(); } diff --git a/src/Umbraco.Tests/Services/ConsentServiceTests.cs b/src/Umbraco.Tests.Integration/Services/ConsentServiceTests.cs similarity index 74% rename from src/Umbraco.Tests/Services/ConsentServiceTests.cs rename to src/Umbraco.Tests.Integration/Services/ConsentServiceTests.cs index a27d6a164e..3cc8666099 100644 --- a/src/Umbraco.Tests/Services/ConsentServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/ConsentServiceTests.cs @@ -2,23 +2,24 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; -using Umbraco.Tests.TestHelpers; +using Umbraco.Core.Services; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; namespace Umbraco.Tests.Services { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)] - public class ConsentServiceTests : TestWithDatabaseBase + public class ConsentServiceTests : UmbracoIntegrationTest { + private IConsentService ConsentService => GetRequiredService(); + [Test] public void CanCrudConsent() { - var consentService = ServiceContext.ConsentService; - // can register - var consent = consentService.RegisterConsent("user/1234", "app1", "do-something", ConsentState.Granted, "no comment"); + var consent = ConsentService.RegisterConsent("user/1234", "app1", "do-something", ConsentState.Granted, "no comment"); Assert.AreNotEqual(0, consent.Id); Assert.IsTrue(consent.Current); @@ -32,16 +33,16 @@ namespace Umbraco.Tests.Services // can register more - consentService.RegisterConsent("user/1234", "app1", "do-something-else", ConsentState.Granted, "no comment"); - consentService.RegisterConsent("user/1236", "app1", "do-something", ConsentState.Granted, "no comment"); - consentService.RegisterConsent("user/1237", "app2", "do-something", ConsentState.Granted, "no comment"); + ConsentService.RegisterConsent("user/1234", "app1", "do-something-else", ConsentState.Granted, "no comment"); + ConsentService.RegisterConsent("user/1236", "app1", "do-something", ConsentState.Granted, "no comment"); + ConsentService.RegisterConsent("user/1237", "app2", "do-something", ConsentState.Granted, "no comment"); // can get by source - var consents = consentService.LookupConsent(source: "user/1235").ToArray(); + var consents = ConsentService.LookupConsent(source: "user/1235").ToArray(); Assert.IsEmpty(consents); - consents = consentService.LookupConsent(source: "user/1234").ToArray(); + consents = ConsentService.LookupConsent(source: "user/1234").ToArray(); Assert.AreEqual(2, consents.Length); Assert.IsTrue(consents.All(x => x.Source == "user/1234")); Assert.IsTrue(consents.Any(x => x.Action == "do-something")); @@ -49,23 +50,23 @@ namespace Umbraco.Tests.Services // can get by context - consents = consentService.LookupConsent(context: "app3").ToArray(); + consents = ConsentService.LookupConsent(context: "app3").ToArray(); Assert.IsEmpty(consents); - consents = consentService.LookupConsent(context: "app2").ToArray(); + consents = ConsentService.LookupConsent(context: "app2").ToArray(); Assert.AreEqual(1, consents.Length); - consents = consentService.LookupConsent(context: "app1").ToArray(); + consents = ConsentService.LookupConsent(context: "app1").ToArray(); Assert.AreEqual(3, consents.Length); Assert.IsTrue(consents.Any(x => x.Action == "do-something")); Assert.IsTrue(consents.Any(x => x.Action == "do-something-else")); // can get by action - consents = consentService.LookupConsent(action: "do-whatever").ToArray(); + consents = ConsentService.LookupConsent(action: "do-whatever").ToArray(); Assert.IsEmpty(consents); - consents = consentService.LookupConsent(context: "app1", action: "do-something").ToArray(); + consents = ConsentService.LookupConsent(context: "app1", action: "do-something").ToArray(); Assert.AreEqual(2, consents.Length); Assert.IsTrue(consents.All(x => x.Action == "do-something")); Assert.IsTrue(consents.Any(x => x.Source == "user/1234")); @@ -73,23 +74,23 @@ namespace Umbraco.Tests.Services // can revoke - consent = consentService.RegisterConsent("user/1234", "app1", "do-something", ConsentState.Revoked, "no comment"); + consent = ConsentService.RegisterConsent("user/1234", "app1", "do-something", ConsentState.Revoked, "no comment"); - consents = consentService.LookupConsent(source: "user/1234", context: "app1", action: "do-something").ToArray(); + consents = ConsentService.LookupConsent(source: "user/1234", context: "app1", action: "do-something").ToArray(); Assert.AreEqual(1, consents.Length); Assert.IsTrue(consents[0].Current); Assert.AreEqual(ConsentState.Revoked, consents[0].State); // can filter - consents = consentService.LookupConsent(context: "app1", action: "do-", actionStartsWith: true).ToArray(); + consents = ConsentService.LookupConsent(context: "app1", action: "do-", actionStartsWith: true).ToArray(); Assert.AreEqual(3, consents.Length); Assert.IsTrue(consents.All(x => x.Context == "app1")); Assert.IsTrue(consents.All(x => x.Action.StartsWith("do-"))); // can get history - consents = consentService.LookupConsent(source: "user/1234", context: "app1", action: "do-something", includeHistory: true).ToArray(); + consents = ConsentService.LookupConsent(source: "user/1234", context: "app1", action: "do-something", includeHistory: true).ToArray(); Assert.AreEqual(1, consents.Length); Assert.IsTrue(consents[0].Current); Assert.AreEqual(ConsentState.Revoked, consents[0].State); @@ -103,19 +104,17 @@ namespace Umbraco.Tests.Services // cannot be stupid Assert.Throws(() => - consentService.RegisterConsent("user/1234", "app1", "do-something", ConsentState.Granted | ConsentState.Revoked, "no comment")); + ConsentService.RegisterConsent("user/1234", "app1", "do-something", ConsentState.Granted | ConsentState.Revoked, "no comment")); } [Test] public void CanRegisterConsentWithoutComment() { - var consentService = ServiceContext.ConsentService; - // Attept to add consent without a comment - consentService.RegisterConsent("user/1234", "app1", "consentWithoutComment", ConsentState.Granted); + ConsentService.RegisterConsent("user/1234", "app1", "consentWithoutComment", ConsentState.Granted); // Attempt to retrieve the consent we just added without a comment - var consents = consentService.LookupConsent(source: "user/1234", action: "consentWithoutComment").ToArray(); + var consents = ConsentService.LookupConsent(source: "user/1234", action: "consentWithoutComment").ToArray(); // Confirm we got our expected consent record Assert.AreEqual(1, consents.Length); diff --git a/src/Umbraco.Tests/Services/ContentServiceEventTests.cs b/src/Umbraco.Tests.Integration/Services/ContentServiceEventTests.cs similarity index 75% rename from src/Umbraco.Tests/Services/ContentServiceEventTests.cs rename to src/Umbraco.Tests.Integration/Services/ContentServiceEventTests.cs index c22679a820..5afc045231 100644 --- a/src/Umbraco.Tests/Services/ContentServiceEventTests.cs +++ b/src/Umbraco.Tests.Integration/Services/ContentServiceEventTests.cs @@ -7,24 +7,29 @@ using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; -using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Services +namespace Umbraco.Tests.Integration.Services { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest, PublishedRepositoryEvents = true, WithApplication = true, Logger = UmbracoTestOptions.Logger.Console)] - public class ContentServiceEventTests : TestWithSomeContentBase + public class ContentServiceEventTests : UmbracoIntegrationTest { + private IContentTypeService ContentTypeService => GetRequiredService(); + private ContentService ContentService => (ContentService)GetRequiredService(); + private ILocalizationService LocalizationService => GetRequiredService(); + private IFileService FileService => GetRequiredService(); + private GlobalSettings _globalSettings; - public override void SetUp() + [SetUp] + public void SetupTest() { - base.SetUp(); ContentRepositoryBase.ThrowOnWarning = true; _globalSettings = new GlobalSettings(); } @@ -38,28 +43,22 @@ namespace Umbraco.Tests.Services [Test] public void Saving_Culture() { - var languageService = ServiceContext.LocalizationService; - - languageService.Save(new Language(_globalSettings, "fr-FR")); - - var contentTypeService = ServiceContext.ContentTypeService; + LocalizationService.Save(new Language(_globalSettings, "fr-FR")); var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); + FileService.SaveTemplate(contentType.DefaultTemplate); contentType.Variations = ContentVariation.Culture; foreach (var propertyType in contentType.PropertyTypes) propertyType.Variations = ContentVariation.Culture; - contentTypeService.Save(contentType); - - var contentService = ServiceContext.ContentService; + ContentTypeService.Save(contentType); IContent document = new Content("content", -1, contentType); document.SetCultureName("hello", "en-US"); document.SetCultureName("bonjour", "fr-FR"); - contentService.Save(document); + ContentService.Save(document); //re-get - dirty properties need resetting - document = contentService.GetById(document.Id); + document = ContentService.GetById(document.Id); // properties: title, bodyText, keywords, description document.SetValue("title", "title-en", "en-US"); @@ -88,7 +87,7 @@ namespace Umbraco.Tests.Services ContentService.Saved += OnSaved; try { - contentService.Save(document); + ContentService.Save(document); } finally { @@ -100,13 +99,9 @@ namespace Umbraco.Tests.Services [Test] public void Saving_Set_Value() { - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - contentTypeService.Save(contentType); - - var contentService = ServiceContext.ContentService; + FileService.SaveTemplate(contentType.DefaultTemplate); + ContentTypeService.Save(contentType); IContent document = new Content("content", -1, contentType); @@ -136,44 +131,37 @@ namespace Umbraco.Tests.Services ContentService.Saved += OnSaved; try { - contentService.Save(document); + ContentService.Save(document); } finally { ContentService.Saving -= OnSaving; ContentService.Saved -= OnSaved; } - } [Test] public void Publishing_Culture() { - var languageService = ServiceContext.LocalizationService; - - languageService.Save(new Language(_globalSettings, "fr-FR")); - - var contentTypeService = ServiceContext.ContentTypeService; + LocalizationService.Save(new Language(_globalSettings, "fr-FR")); var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); + FileService.SaveTemplate(contentType.DefaultTemplate); contentType.Variations = ContentVariation.Culture; foreach (var propertyType in contentType.PropertyTypes) propertyType.Variations = ContentVariation.Culture; - contentTypeService.Save(contentType); - - var contentService = ServiceContext.ContentService; + ContentTypeService.Save(contentType); IContent document = new Content("content", -1, contentType); document.SetCultureName("hello", "en-US"); document.SetCultureName("bonjour", "fr-FR"); - contentService.Save(document); + ContentService.Save(document); Assert.IsFalse(document.IsCulturePublished("fr-FR")); Assert.IsFalse(document.IsCulturePublished("en-US")); //re-get - dirty properties need resetting - document = contentService.GetById(document.Id); + document = ContentService.GetById(document.Id); void OnPublishing(IContentService sender, ContentPublishingEventArgs e) { @@ -199,7 +187,7 @@ namespace Umbraco.Tests.Services ContentService.Published += OnPublished; try { - contentService.SaveAndPublish(document, "fr-FR"); + ContentService.SaveAndPublish(document, "fr-FR"); } finally { @@ -207,7 +195,7 @@ namespace Umbraco.Tests.Services ContentService.Published -= OnPublished; } - document = contentService.GetById(document.Id); + document = ContentService.GetById(document.Id); // ensure it works and does not throw Assert.IsTrue(document.IsCulturePublished("fr-FR")); @@ -217,13 +205,9 @@ namespace Umbraco.Tests.Services [Test] public void Publishing_Set_Value() { - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - contentTypeService.Save(contentType); - - var contentService = ServiceContext.ContentService; + FileService.SaveTemplate(contentType.DefaultTemplate); + ContentTypeService.Save(contentType); IContent document = new Content("content", -1, contentType); @@ -242,21 +226,21 @@ namespace Umbraco.Tests.Services Assert.AreSame("title", document.GetValue("title")); - //we're only dealing with invariant here + // We're only dealing with invariant here. var propValue = saved.Properties["title"].Values.First(x => x.Culture == null && x.Segment == null); Assert.AreEqual("title", propValue.EditedValue); Assert.AreEqual("title", propValue.PublishedValue); } - //We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be - //used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model - //are published, but Saving is raised BEFORE. + // We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be + // used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model + // are published, but Saving is raised BEFORE. ContentService.Saving += OnSaving; ContentService.Saved += OnSaved; try { - contentService.SaveAndPublish(document); + ContentService.SaveAndPublish(document); } finally { @@ -268,19 +252,15 @@ namespace Umbraco.Tests.Services [Test] public void Publishing_Set_Mandatory_Value() { - var contentTypeService = ServiceContext.ContentTypeService; - var contentType = MockedContentTypes.CreateTextPageContentType(); var titleProperty = contentType.PropertyTypes.First(x => x.Alias == "title"); titleProperty.Mandatory = true; // make this required! - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); - contentTypeService.Save(contentType); - - var contentService = ServiceContext.ContentService; + FileService.SaveTemplate(contentType.DefaultTemplate); + ContentTypeService.Save(contentType); IContent document = new Content("content", -1, contentType); - var result = contentService.SaveAndPublish(document); + var result = ContentService.SaveAndPublish(document); Assert.IsFalse(result.Success); Assert.AreEqual("title", result.InvalidProperties.First().Alias); @@ -297,13 +277,13 @@ namespace Umbraco.Tests.Services saved.SetValue("title", "title"); } - //We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be - //used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model - //are published, but Saving is raised BEFORE. + // We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be + // used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model + // are published, but Saving is raised BEFORE. ContentService.Saving += OnSaving; try { - result = contentService.SaveAndPublish(document); + result = ContentService.SaveAndPublish(document); Assert.IsTrue(result.Success); //will succeed now because we were able to specify the required value in the Saving event } finally @@ -315,20 +295,16 @@ namespace Umbraco.Tests.Services [Test] public void Unpublishing_Culture() { - var languageService = ServiceContext.LocalizationService; - - languageService.Save(new Language(_globalSettings, "fr-FR")); - - var contentTypeService = ServiceContext.ContentTypeService; + LocalizationService.Save(new Language(_globalSettings, "fr-FR")); var contentType = MockedContentTypes.CreateTextPageContentType(); - ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); + FileService.SaveTemplate(contentType.DefaultTemplate); contentType.Variations = ContentVariation.Culture; foreach (var propertyType in contentType.PropertyTypes) propertyType.Variations = ContentVariation.Culture; - contentTypeService.Save(contentType); + ContentTypeService.Save(contentType); - var contentService = (ContentService)ServiceContext.ContentService; + var contentService = (ContentService)ContentService; IContent document = new Content("content", -1, contentType); document.SetCultureName("hello", "en-US"); diff --git a/src/Umbraco.Tests/Services/ContentServicePublishBranchTests.cs b/src/Umbraco.Tests.Integration/Services/ContentServicePublishBranchTests.cs similarity index 83% rename from src/Umbraco.Tests/Services/ContentServicePublishBranchTests.cs rename to src/Umbraco.Tests.Integration/Services/ContentServicePublishBranchTests.cs index 51adfbeae9..9e45e40c42 100644 --- a/src/Umbraco.Tests/Services/ContentServicePublishBranchTests.cs +++ b/src/Umbraco.Tests.Integration/Services/ContentServicePublishBranchTests.cs @@ -6,8 +6,7 @@ using Umbraco.Core; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; // ReSharper disable CommentTypo @@ -16,8 +15,12 @@ namespace Umbraco.Tests.Services { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest, PublishedRepositoryEvents = true, WithApplication = true)] - public class ContentServicePublishBranchTests : TestWithDatabaseBase + public class ContentServicePublishBranchTests : UmbracoIntegrationTest { + private IContentService ContentService => GetRequiredService(); + private ILocalizationService LocalizationService => GetRequiredService(); + private IContentTypeService ContentTypeService => GetRequiredService(); + [TestCase(1)] // use overload w/ culture: "*" [TestCase(2)] // use overload w/ cultures: new [] { "*" } public void Can_Publish_Invariant_Branch(int method) @@ -26,13 +29,13 @@ namespace Umbraco.Tests.Services IContent iRoot = new Content("iroot", -1, iContentType); iRoot.SetValue("ip", "iroot"); - ServiceContext.ContentService.Save(iRoot); + ContentService.Save(iRoot); IContent ii1 = new Content("ii1", iRoot, iContentType); ii1.SetValue("ip", "vii1"); - ServiceContext.ContentService.Save(ii1); + ContentService.Save(ii1); IContent ii2 = new Content("ii2", iRoot, iContentType); ii2.SetValue("ip", "vii2"); - ServiceContext.ContentService.Save(ii2); + ContentService.Save(ii2); // iroot !published !edited // ii1 !published !edited @@ -51,24 +54,24 @@ namespace Umbraco.Tests.Services // prepare - ServiceContext.ContentService.SaveAndPublish(iRoot); - ServiceContext.ContentService.SaveAndPublish(ii1); + ContentService.SaveAndPublish(iRoot); + ContentService.SaveAndPublish(ii1); IContent ii11 = new Content("ii11", ii1, iContentType); ii11.SetValue("ip", "vii11"); - ServiceContext.ContentService.SaveAndPublish(ii11); + ContentService.SaveAndPublish(ii11); IContent ii12 = new Content("ii12", ii1, iContentType); ii11.SetValue("ip", "vii12"); - ServiceContext.ContentService.Save(ii12); + ContentService.Save(ii12); - ServiceContext.ContentService.SaveAndPublish(ii2); + ContentService.SaveAndPublish(ii2); IContent ii21 = new Content("ii21", ii2, iContentType); ii21.SetValue("ip", "vii21"); - ServiceContext.ContentService.SaveAndPublish(ii21); + ContentService.SaveAndPublish(ii21); IContent ii22 = new Content("ii22", ii2, iContentType); ii22.SetValue("ip", "vii22"); - ServiceContext.ContentService.Save(ii22); - ServiceContext.ContentService.Unpublish(ii2); + ContentService.Save(ii22); + ContentService.Unpublish(ii2); // iroot published !edited // ii1 published !edited @@ -94,9 +97,9 @@ namespace Umbraco.Tests.Services // prepare iRoot.SetValue("ip", "changed"); - ServiceContext.ContentService.Save(iRoot); + ContentService.Save(iRoot); ii11.SetValue("ip", "changed"); - ServiceContext.ContentService.Save(ii11); + ContentService.Save(ii11); // iroot published edited *** // ii1 published !edited @@ -133,7 +136,7 @@ namespace Umbraco.Tests.Services PublishResultType.SuccessPublishAlready, // was masked PublishResultType.SuccessPublish); - ii21 = ServiceContext.ContentService.GetById(ii21.Id); + ii21 = ContentService.GetById(ii21.Id); Assert.IsTrue(ii21.Published); } @@ -151,7 +154,7 @@ namespace Umbraco.Tests.Services vRoot.SetValue("vp", "vroot.de", "de"); vRoot.SetValue("vp", "vroot.ru", "ru"); vRoot.SetValue("vp", "vroot.es", "es"); - ServiceContext.ContentService.SaveAndPublish(vRoot); + ContentService.SaveAndPublish(vRoot); //create/publish child IContent iv1 = new Content("iv1", vRoot, vContentType, "de"); @@ -162,13 +165,13 @@ namespace Umbraco.Tests.Services iv1.SetValue("vp", "iv1.de", "de"); iv1.SetValue("vp", "iv1.ru", "ru"); iv1.SetValue("vp", "iv1.es", "es"); - ServiceContext.ContentService.SaveAndPublish(iv1); + ContentService.SaveAndPublish(iv1); //update the child iv1.SetValue("vp", "UPDATED-iv1.de", "de"); - ServiceContext.ContentService.Save(iv1); + ContentService.Save(iv1); - var r = ServiceContext.ContentService.SaveAndPublishBranch(vRoot, false).ToArray(); //no culture specified so "*" is used, so all cultures + var r = ContentService.SaveAndPublishBranch(vRoot, false).ToArray(); //no culture specified so "*" is used, so all cultures Assert.AreEqual(PublishResultType.SuccessPublishAlready, r[0].Result); Assert.AreEqual(PublishResultType.SuccessPublishCulture, r[1].Result); } @@ -187,7 +190,7 @@ namespace Umbraco.Tests.Services vRoot.SetValue("vp", "vroot.de", "de"); vRoot.SetValue("vp", "vroot.ru", "ru"); vRoot.SetValue("vp", "vroot.es", "es"); - ServiceContext.ContentService.SaveAndPublish(vRoot); + ContentService.SaveAndPublish(vRoot); //create/publish child IContent iv1 = new Content("iv1", vRoot, vContentType, "de"); @@ -198,13 +201,13 @@ namespace Umbraco.Tests.Services iv1.SetValue("vp", "iv1.de", "de"); iv1.SetValue("vp", "iv1.ru", "ru"); iv1.SetValue("vp", "iv1.es", "es"); - ServiceContext.ContentService.SaveAndPublish(iv1); + ContentService.SaveAndPublish(iv1); //update the child iv1.SetValue("vp", "UPDATED-iv1.de", "de"); - var saveResult = ServiceContext.ContentService.Save(iv1); + var saveResult = ContentService.Save(iv1); - var r = ServiceContext.ContentService.SaveAndPublishBranch(vRoot, false, "de").ToArray(); + var r = ContentService.SaveAndPublishBranch(vRoot, false, "de").ToArray(); Assert.AreEqual(PublishResultType.SuccessPublishAlready, r[0].Result); Assert.AreEqual(PublishResultType.SuccessPublishCulture, r[1].Result); } @@ -222,7 +225,7 @@ namespace Umbraco.Tests.Services vRoot.SetValue("vp", "vroot.de", "de"); vRoot.SetValue("vp", "vroot.ru", "ru"); vRoot.SetValue("vp", "vroot.es", "es"); - ServiceContext.ContentService.Save(vRoot); + ContentService.Save(vRoot); IContent iv1 = new Content("iv1", vRoot, vContentType, "de"); iv1.SetCultureName("iv1.de", "de"); @@ -232,7 +235,7 @@ namespace Umbraco.Tests.Services iv1.SetValue("vp", "iv1.de", "de"); iv1.SetValue("vp", "iv1.ru", "ru"); iv1.SetValue("vp", "iv1.es", "es"); - ServiceContext.ContentService.Save(iv1); + ContentService.Save(iv1); IContent iv2 = new Content("iv2", vRoot, vContentType, "de"); iv2.SetCultureName("iv2.de", "de"); @@ -242,7 +245,7 @@ namespace Umbraco.Tests.Services iv2.SetValue("vp", "iv2.de", "de"); iv2.SetValue("vp", "iv2.ru", "ru"); iv2.SetValue("vp", "iv2.es", "es"); - ServiceContext.ContentService.Save(iv2); + ContentService.Save(iv2); // vroot !published !edited // iv1 !published !edited @@ -251,7 +254,7 @@ namespace Umbraco.Tests.Services // !force = publishes those that are actually published, and have changes // here: nothing - var r = ServiceContext.ContentService.SaveAndPublishBranch(vRoot, false).ToArray(); // no culture specified = all cultures + var r = ContentService.SaveAndPublishBranch(vRoot, false).ToArray(); // no culture specified = all cultures // not forcing, iv1 and iv2 not published yet: only root got published AssertPublishResults(r, x => x.Content.Name, @@ -264,15 +267,15 @@ namespace Umbraco.Tests.Services vRoot.SetValue("vp", "changed.de", "de"); vRoot.SetValue("vp", "changed.ru", "ru"); vRoot.SetValue("vp", "changed.es", "es"); - ServiceContext.ContentService.Save(vRoot); // now root has drafts in all cultures + ContentService.Save(vRoot); // now root has drafts in all cultures - ServiceContext.ContentService.SaveAndPublish(iv1, new []{"de", "ru"}); // now iv1 de and ru are published + ContentService.SaveAndPublish(iv1, new []{"de", "ru"}); // now iv1 de and ru are published iv1.SetValue("ip", "changed"); iv1.SetValue("vp", "changed.de", "de"); iv1.SetValue("vp", "changed.ru", "ru"); iv1.SetValue("vp", "changed.es", "es"); - ServiceContext.ContentService.Save(iv1); // now iv1 has drafts in all cultures + ContentService.Save(iv1); // now iv1 has drafts in all cultures // validate - everything published for root, because no culture was specified = all Assert.IsTrue(vRoot.Published); @@ -286,7 +289,7 @@ namespace Umbraco.Tests.Services Assert.IsTrue(iv1.IsCulturePublished("ru")); Assert.IsFalse(iv1.IsCulturePublished("es")); - r = ServiceContext.ContentService.SaveAndPublishBranch(vRoot, false, "de").ToArray(); + r = ContentService.SaveAndPublishBranch(vRoot, false, "de").ToArray(); // not forcing, iv2 not published yet: only root and iv1 got published AssertPublishResults(r, x => x.Content.Name, @@ -332,21 +335,21 @@ namespace Umbraco.Tests.Services // invariant root -> invariant -> variant iRoot = new Content("iroot", -1, iContentType); iRoot.SetValue("ip", "iroot"); - ServiceContext.ContentService.SaveAndPublish(iRoot); + ContentService.SaveAndPublish(iRoot); ii1 = new Content("ii1", iRoot, iContentType); ii1.SetValue("ip", "vii1"); - ServiceContext.ContentService.SaveAndPublish(ii1); + ContentService.SaveAndPublish(ii1); ii1.SetValue("ip", "changed"); - ServiceContext.ContentService.Save(ii1); + ContentService.Save(ii1); iv11 = new Content("iv11.de", ii1, vContentType, "de"); iv11.SetValue("ip", "iv11"); iv11.SetValue("vp", "iv11.de", "de"); iv11.SetValue("vp", "iv11.ru", "ru"); iv11.SetValue("vp", "iv11.es", "es"); - ServiceContext.ContentService.Save(iv11); + ContentService.Save(iv11); iv11.SetCultureName("iv11.ru", "ru"); - var xxx = ServiceContext.ContentService.SaveAndPublish(iv11, new []{"de", "ru"}); + var xxx = ContentService.SaveAndPublish(iv11, new []{"de", "ru"}); Assert.AreEqual("iv11.de", iv11.GetValue("vp", "de", published: true)); Assert.AreEqual("iv11.ru", iv11.GetValue("vp", "ru", published: true)); @@ -354,7 +357,7 @@ namespace Umbraco.Tests.Services iv11.SetValue("ip", "changed"); iv11.SetValue("vp", "changed.de", "de"); iv11.SetValue("vp", "changed.ru", "ru"); - ServiceContext.ContentService.Save(iv11); + ContentService.Save(iv11); } [Test] @@ -362,7 +365,7 @@ namespace Umbraco.Tests.Services { Can_Publish_Mixed_Branch(out var iRoot, out var ii1, out var iv11); - var r = ServiceContext.ContentService.SaveAndPublishBranch(iRoot, false, "de").ToArray(); + var r = ContentService.SaveAndPublishBranch(iRoot, false, "de").ToArray(); AssertPublishResults(r, x => x.Content.Name, "iroot", "ii1", "iv11.de"); AssertPublishResults(r, x => x.Result, @@ -388,7 +391,7 @@ namespace Umbraco.Tests.Services { Can_Publish_Mixed_Branch(out var iRoot, out var ii1, out var iv11); - var r = ServiceContext.ContentService.SaveAndPublishBranch(iRoot, false, new[] { "de", "ru" }).ToArray(); + var r = ContentService.SaveAndPublishBranch(iRoot, false, new[] { "de", "ru" }).ToArray(); AssertPublishResults(r, x => x.Content.Name, "iroot", "ii1", "iv11.de"); AssertPublishResults(r, x => x.Result, @@ -423,18 +426,18 @@ namespace Umbraco.Tests.Services } private void Reload(ref IContent document) - => document = ServiceContext.ContentService.GetById(document.Id); + => document = ContentService.GetById(document.Id); private void CreateTypes(out IContentType iContentType, out IContentType vContentType) { var globalSettings = new GlobalSettings(); var langDe = new Language(globalSettings, "de") { IsDefault = true }; - ServiceContext.LocalizationService.Save(langDe); + LocalizationService.Save(langDe); var langRu = new Language(globalSettings, "ru"); - ServiceContext.LocalizationService.Save(langRu); + LocalizationService.Save(langRu); var langEs = new Language(globalSettings, "es"); - ServiceContext.LocalizationService.Save(langEs); + LocalizationService.Save(langEs); iContentType = new ContentType(ShortStringHelper, -1) { @@ -443,7 +446,7 @@ namespace Umbraco.Tests.Services Variations = ContentVariation.Nothing }; iContentType.AddPropertyType(new PropertyType(ShortStringHelper, Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Nvarchar, "ip") { Variations = ContentVariation.Nothing }); - ServiceContext.ContentTypeService.Save(iContentType); + ContentTypeService.Save(iContentType); vContentType = new ContentType(ShortStringHelper, -1) { @@ -453,7 +456,7 @@ namespace Umbraco.Tests.Services }; vContentType.AddPropertyType(new PropertyType(ShortStringHelper, Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Nvarchar, "ip") { Variations = ContentVariation.Nothing }); vContentType.AddPropertyType(new PropertyType(ShortStringHelper, Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Nvarchar, "vp") { Variations = ContentVariation.Culture }); - ServiceContext.ContentTypeService.Save(vContentType); + ContentTypeService.Save(vContentType); } private IEnumerable SaveAndPublishInvariantBranch(IContent content, bool force, int method) @@ -463,9 +466,9 @@ namespace Umbraco.Tests.Services switch (method) { case 1: - return ServiceContext.ContentService.SaveAndPublishBranch(content, force, culture: "*"); + return ContentService.SaveAndPublishBranch(content, force, culture: "*"); case 2: - return ServiceContext.ContentService.SaveAndPublishBranch(content, force, cultures: new [] { "*" }); + return ContentService.SaveAndPublishBranch(content, force, cultures: new [] { "*" }); default: throw new ArgumentOutOfRangeException(nameof(method)); } diff --git a/src/Umbraco.Tests/Services/DataTypeServiceTests.cs b/src/Umbraco.Tests.Integration/Services/DataTypeServiceTests.cs similarity index 61% rename from src/Umbraco.Tests/Services/DataTypeServiceTests.cs rename to src/Umbraco.Tests.Integration/Services/DataTypeServiceTests.cs index 3f9755d4f3..d61fd5f813 100644 --- a/src/Umbraco.Tests/Services/DataTypeServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/DataTypeServiceTests.cs @@ -3,8 +3,10 @@ using System.Linq; using System.Threading; using NUnit.Framework; using Umbraco.Core.Models; -using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; +using Umbraco.Tests.Integration.Testing; +using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; namespace Umbraco.Tests.Services @@ -15,23 +17,26 @@ namespace Umbraco.Tests.Services [TestFixture] [Apartment(ApartmentState.STA)] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class DataTypeServiceTests : TestWithSomeContentBase + public class DataTypeServiceTests : UmbracoIntegrationTest { + + private IDataTypeService DataTypeService => GetRequiredService(); + private IContentTypeService ContentTypeService => GetRequiredService(); + private ILocalizedTextService LocalizedTextService => GetRequiredService(); + private ILocalizationService LocalizationService => GetRequiredService(); + [Test] public void DataTypeService_Can_Persist_New_DataTypeDefinition() { - // Arrange - var dataTypeService = ServiceContext.DataTypeService; - // Act - IDataType dataType = new DataType(new LabelPropertyEditor(LoggerFactory, IOHelper, DataTypeService, LocalizedTextService,LocalizationService, ShortStringHelper)) { Name = "Testing Textfield", DatabaseType = ValueStorageType.Ntext }; - dataTypeService.Save(dataType); + IDataType dataType = new DataType(new LabelPropertyEditor(LoggerFactory, IOHelper, DataTypeService, LocalizedTextService, LocalizationService, ShortStringHelper)) { Name = "Testing Textfield", DatabaseType = ValueStorageType.Ntext }; + DataTypeService.Save(dataType); // Assert Assert.That(dataType, Is.Not.Null); Assert.That(dataType.HasIdentity, Is.True); - dataType = dataTypeService.GetDataType(dataType.Id); + dataType = DataTypeService.GetDataType(dataType.Id); Assert.That(dataType, Is.Not.Null); } @@ -39,22 +44,24 @@ namespace Umbraco.Tests.Services public void DataTypeService_Can_Delete_Textfield_DataType_And_Clear_Usages() { // Arrange - var dataTypeService = ServiceContext.DataTypeService; var textfieldId = "Umbraco.Textbox"; - var dataTypeDefinitions = dataTypeService.GetByEditorAlias(textfieldId); + var dataTypeDefinitions = DataTypeService.GetByEditorAlias(textfieldId); + var doctype = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + ContentTypeService.Save(doctype); + // Act var definition = dataTypeDefinitions.First(); var definitionId = definition.Id; - dataTypeService.Delete(definition); + DataTypeService.Delete(definition); - var deletedDefinition = dataTypeService.GetDataType(definitionId); + var deletedDefinition = DataTypeService.GetDataType(definitionId); // Assert Assert.That(deletedDefinition, Is.Null); //Further assertions against the ContentType that contains PropertyTypes based on the TextField - var contentType = ServiceContext.ContentTypeService.Get(NodeDto.NodeIdSeed+1); + var contentType = ContentTypeService.Get(doctype.Id); Assert.That(contentType.Alias, Is.EqualTo("umbTextpage")); Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(1)); } @@ -62,14 +69,11 @@ namespace Umbraco.Tests.Services [Test] public void Cannot_Save_DataType_With_Empty_Name() { - // Arrange - var dataTypeService = ServiceContext.DataTypeService; - // Act var dataTypeDefinition = new DataType(new LabelPropertyEditor(LoggerFactory, IOHelper, DataTypeService, LocalizedTextService,LocalizationService, ShortStringHelper)) { Name = string.Empty, DatabaseType = ValueStorageType.Ntext }; // Act & Assert - Assert.Throws(() => dataTypeService.Save(dataTypeDefinition)); + Assert.Throws(() => DataTypeService.Save(dataTypeDefinition)); } } } diff --git a/src/Umbraco.Tests/Services/EntityServiceTests.cs b/src/Umbraco.Tests.Integration/Services/EntityServiceTests.cs similarity index 64% rename from src/Umbraco.Tests/Services/EntityServiceTests.cs rename to src/Umbraco.Tests.Integration/Services/EntityServiceTests.cs index ca2f123deb..2a12df8dcd 100644 --- a/src/Umbraco.Tests/Services/EntityServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/EntityServiceTests.cs @@ -7,10 +7,9 @@ using Umbraco.Core; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -22,66 +21,74 @@ namespace Umbraco.Tests.Services [TestFixture] [Apartment(ApartmentState.STA)] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)] - public class EntityServiceTests : TestWithSomeContentBase + public class EntityServiceTests : UmbracoIntegrationTest { private Language _langFr; private Language _langEs; - public override void SetUp() - { - base.SetUp(); + private ILocalizationService LocalizationService => GetRequiredService(); + private IContentTypeService ContentTypeService => GetRequiredService(); + private IContentService ContentService => GetRequiredService(); + private IEntityService EntityService => GetRequiredService(); + private ISqlContext SqlContext => GetRequiredService(); + private IMediaTypeService MediaTypeService => GetRequiredService(); + private IMediaService MediaService => GetRequiredService(); + private IFileService FileService => GetRequiredService(); + [SetUp] + public void SetupTestData() + { if (_langFr == null && _langEs == null) { var globalSettings = new GlobalSettings(); _langFr = new Language(globalSettings, "fr-FR"); _langEs = new Language(globalSettings, "es-ES"); - ServiceContext.LocalizationService.Save(_langFr); - ServiceContext.LocalizationService.Save(_langEs); + LocalizationService.Save(_langFr); + LocalizationService.Save(_langEs); } + + CreateTestData(); } [Test] public void EntityService_Can_Get_Paged_Descendants_Ordering_Path() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); var root = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(root); + ContentService.Save(root); var rootId = root.Id; var ids = new List(); for (int i = 0; i < 10; i++) { var c1 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root); - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); ids.Add(c1.Id); root = c1; // make a hierarchy } - var service = ServiceContext.EntityService; - long total; - var entities = service.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 0, 6, out total).ToArray(); + var entities = EntityService.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 0, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); Assert.AreEqual(ids[0], entities[0].Id); - entities = service.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 1, 6, out total).ToArray(); + entities = EntityService.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 1, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); Assert.AreEqual(ids[6], entities[0].Id); //Test ordering direction - entities = service.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 0, 6, out total, + entities = EntityService.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 0, 6, out total, ordering: Ordering.By("Path", Direction.Descending)).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); Assert.AreEqual(ids[ids.Count - 1], entities[0].Id); - entities = service.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 1, 6, out total, + entities = EntityService.GetPagedDescendants(rootId, UmbracoObjectTypes.Document, 1, 6, out total, ordering: Ordering.By("Path", Direction.Descending)).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); @@ -92,41 +99,39 @@ namespace Umbraco.Tests.Services public void EntityService_Can_Get_Paged_Content_Children() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); var root = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(root); + ContentService.Save(root); var ids = new List(); for (int i = 0; i < 10; i++) { var c1 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root); - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); ids.Add(c1.Id); } - var service = ServiceContext.EntityService; - long total; - var entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 0, 6, out total).ToArray(); + var entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 0, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); Assert.AreEqual(ids[0], entities[0].Id); - entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 1, 6, out total).ToArray(); + entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 1, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); Assert.AreEqual(ids[6], entities[0].Id); //Test ordering direction - entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 0, 6, out total, + entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 0, 6, out total, ordering: Ordering.By("SortOrder", Direction.Descending)).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); Assert.AreEqual(ids[ids.Count - 1], entities[0].Id); - entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 1, 6, out total, + entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Document, 1, 6, out total, ordering: Ordering.By("SortOrder", Direction.Descending)).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); @@ -136,32 +141,30 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Content_Descendants() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); var root = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(root); + ContentService.Save(root); var count = 0; for (int i = 0; i < 10; i++) { var c1 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root); - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); count++; for (int j = 0; j < 5; j++) { var c2 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1); - ServiceContext.ContentService.Save(c2); + ContentService.Save(c2); count++; } } - var service = ServiceContext.EntityService; - long total; - var entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 0, 31, out total).ToArray(); + var entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 0, 31, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(31)); Assert.That(total, Is.EqualTo(60)); - entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 1, 31, out total).ToArray(); + entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 1, 31, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(29)); Assert.That(total, Is.EqualTo(60)); } @@ -169,15 +172,15 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Content_Descendants_Including_Recycled() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); var root = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(root); + ContentService.Save(root); var toDelete = new List(); for (int i = 0; i < 10; i++) { var c1 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root); - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); if (i % 2 == 0) { @@ -187,20 +190,18 @@ namespace Umbraco.Tests.Services for (int j = 0; j < 5; j++) { var c2 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1); - ServiceContext.ContentService.Save(c2); + ContentService.Save(c2); } } foreach (var content in toDelete) { - ServiceContext.ContentService.MoveToRecycleBin(content); + ContentService.MoveToRecycleBin(content); } - var service = ServiceContext.EntityService; - long total; //search at root to see if it returns recycled - var entities = service.GetPagedDescendants(-1, UmbracoObjectTypes.Document, 0, 1000, out total) + var entities = EntityService.GetPagedDescendants(-1, UmbracoObjectTypes.Document, 0, 1000, out total) .Select(x => x.Id) .ToArray(); @@ -213,15 +214,15 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Content_Descendants_Without_Recycled() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); var root = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(root); + ContentService.Save(root); var toDelete = new List(); for (int i = 0; i < 10; i++) { var c1 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), root); - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); if (i % 2 == 0) { @@ -231,20 +232,18 @@ namespace Umbraco.Tests.Services for (int j = 0; j < 5; j++) { var c2 = MockedContent.CreateSimpleContent(contentType, Guid.NewGuid().ToString(), c1); - ServiceContext.ContentService.Save(c2); + ContentService.Save(c2); } } foreach (var content in toDelete) { - ServiceContext.ContentService.MoveToRecycleBin(content); + ContentService.MoveToRecycleBin(content); } - var service = ServiceContext.EntityService; - long total; //search at root to see if it returns recycled - var entities = service.GetPagedDescendants(UmbracoObjectTypes.Document, 0, 1000, out total, includeTrashed: false) + var entities = EntityService.GetPagedDescendants(UmbracoObjectTypes.Document, 0, 1000, out total, includeTrashed: false) .Select(x => x.Id) .ToArray(); @@ -257,31 +256,29 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Content_Descendants_With_Search() { - var contentType = ServiceContext.ContentTypeService.Get("umbTextpage"); + var contentType = ContentTypeService.Get("umbTextpage"); var root = MockedContent.CreateSimpleContent(contentType); - ServiceContext.ContentService.Save(root); + ContentService.Save(root); for (int i = 0; i < 10; i++) { var c1 = MockedContent.CreateSimpleContent(contentType, "ssss" + Guid.NewGuid(), root); - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); for (int j = 0; j < 5; j++) { var c2 = MockedContent.CreateSimpleContent(contentType, "tttt" + Guid.NewGuid(), c1); - ServiceContext.ContentService.Save(c2); + ContentService.Save(c2); } } - var service = ServiceContext.EntityService; - long total; - var entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 0, 10, out total, + var entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 0, 10, out total, filter: SqlContext.Query().Where(x => x.Name.Contains("ssss"))).ToArray(); Assert.That(entities.Length, Is.EqualTo(10)); Assert.That(total, Is.EqualTo(10)); - entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 0, 50, out total, + entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Document, 0, 50, out total, filter: SqlContext.Query().Where(x => x.Name.Contains("tttt"))).ToArray(); Assert.That(entities.Length, Is.EqualTo(50)); Assert.That(total, Is.EqualTo(50)); @@ -290,24 +287,22 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Media_Children() { - var folderType = ServiceContext.MediaTypeService.Get(1031); - var imageMediaType = ServiceContext.MediaTypeService.Get(1032); + var folderType = MediaTypeService.Get(1031); + var imageMediaType = MediaTypeService.Get(1032); var root = MockedMedia.CreateMediaFolder(folderType, -1); - ServiceContext.MediaService.Save(root); + MediaService.Save(root); for (int i = 0; i < 10; i++) { var c1 = MockedMedia.CreateMediaImage(imageMediaType, root.Id); - ServiceContext.MediaService.Save(c1); + MediaService.Save(c1); } - var service = ServiceContext.EntityService; - long total; - var entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Media, 0, 6, out total).ToArray(); + var entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Media, 0, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); Assert.That(total, Is.EqualTo(10)); - entities = service.GetPagedChildren(root.Id, UmbracoObjectTypes.Media, 1, 6, out total).ToArray(); + entities = EntityService.GetPagedChildren(root.Id, UmbracoObjectTypes.Media, 1, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(4)); Assert.That(total, Is.EqualTo(10)); } @@ -315,33 +310,31 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Media_Descendants() { - var folderType = ServiceContext.MediaTypeService.Get(1031); - var imageMediaType = ServiceContext.MediaTypeService.Get(1032); + var folderType = MediaTypeService.Get(1031); + var imageMediaType = MediaTypeService.Get(1032); var root = MockedMedia.CreateMediaFolder(folderType, -1); - ServiceContext.MediaService.Save(root); + MediaService.Save(root); var count = 0; for (int i = 0; i < 10; i++) { var c1 = MockedMedia.CreateMediaImage(imageMediaType, root.Id); - ServiceContext.MediaService.Save(c1); + MediaService.Save(c1); count++; for (int j = 0; j < 5; j++) { var c2 = MockedMedia.CreateMediaImage(imageMediaType, c1.Id); - ServiceContext.MediaService.Save(c2); + MediaService.Save(c2); count++; } } - var service = ServiceContext.EntityService; - long total; - var entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 0, 31, out total).ToArray(); + var entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 0, 31, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(31)); Assert.That(total, Is.EqualTo(60)); - entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 1, 31, out total).ToArray(); + entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 1, 31, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(29)); Assert.That(total, Is.EqualTo(60)); } @@ -349,16 +342,16 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Media_Descendants_Including_Recycled() { - var folderType = ServiceContext.MediaTypeService.Get(1031); - var imageMediaType = ServiceContext.MediaTypeService.Get(1032); + var folderType = MediaTypeService.Get(1031); + var imageMediaType = MediaTypeService.Get(1032); var root = MockedMedia.CreateMediaFolder(folderType, -1); - ServiceContext.MediaService.Save(root); + MediaService.Save(root); var toDelete = new List(); for (int i = 0; i < 10; i++) { var c1 = MockedMedia.CreateMediaImage(imageMediaType, root.Id); - ServiceContext.MediaService.Save(c1); + MediaService.Save(c1); if (i % 2 == 0) { @@ -368,20 +361,18 @@ namespace Umbraco.Tests.Services for (int j = 0; j < 5; j++) { var c2 = MockedMedia.CreateMediaImage(imageMediaType, c1.Id); - ServiceContext.MediaService.Save(c2); + MediaService.Save(c2); } } foreach (var content in toDelete) { - ServiceContext.MediaService.MoveToRecycleBin(content); + MediaService.MoveToRecycleBin(content); } - var service = ServiceContext.EntityService; - long total; //search at root to see if it returns recycled - var entities = service.GetPagedDescendants(-1, UmbracoObjectTypes.Media, 0, 1000, out total) + var entities = EntityService.GetPagedDescendants(-1, UmbracoObjectTypes.Media, 0, 1000, out total) .Select(x => x.Id) .ToArray(); @@ -394,16 +385,16 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Media_Descendants_Without_Recycled() { - var folderType = ServiceContext.MediaTypeService.Get(1031); - var imageMediaType = ServiceContext.MediaTypeService.Get(1032); + var folderType = MediaTypeService.Get(1031); + var imageMediaType = MediaTypeService.Get(1032); var root = MockedMedia.CreateMediaFolder(folderType, -1); - ServiceContext.MediaService.Save(root); + MediaService.Save(root); var toDelete = new List(); for (int i = 0; i < 10; i++) { var c1 = MockedMedia.CreateMediaImage(imageMediaType, root.Id); - ServiceContext.MediaService.Save(c1); + MediaService.Save(c1); if (i % 2 == 0) { @@ -413,20 +404,18 @@ namespace Umbraco.Tests.Services for (int j = 0; j < 5; j++) { var c2 = MockedMedia.CreateMediaImage(imageMediaType, c1.Id); - ServiceContext.MediaService.Save(c2); + MediaService.Save(c2); } } foreach (var content in toDelete) { - ServiceContext.MediaService.MoveToRecycleBin(content); + MediaService.MoveToRecycleBin(content); } - var service = ServiceContext.EntityService; - long total; //search at root to see if it returns recycled - var entities = service.GetPagedDescendants(UmbracoObjectTypes.Media, 0, 1000, out total, includeTrashed: false) + var entities = EntityService.GetPagedDescendants(UmbracoObjectTypes.Media, 0, 1000, out total, includeTrashed: false) .Select(x => x.Id) .ToArray(); @@ -439,34 +428,32 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Paged_Media_Descendants_With_Search() { - var folderType = ServiceContext.MediaTypeService.Get(1031); - var imageMediaType = ServiceContext.MediaTypeService.Get(1032); + var folderType = MediaTypeService.Get(1031); + var imageMediaType = MediaTypeService.Get(1032); var root = MockedMedia.CreateMediaFolder(folderType, -1); - ServiceContext.MediaService.Save(root); + MediaService.Save(root); for (int i = 0; i < 10; i++) { var c1 = MockedMedia.CreateMediaImage(imageMediaType, root.Id); c1.Name = "ssss" + Guid.NewGuid(); - ServiceContext.MediaService.Save(c1); + MediaService.Save(c1); for (int j = 0; j < 5; j++) { var c2 = MockedMedia.CreateMediaImage(imageMediaType, c1.Id); c2.Name = "tttt" + Guid.NewGuid(); - ServiceContext.MediaService.Save(c2); + MediaService.Save(c2); } } - var service = ServiceContext.EntityService; - long total; - var entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 0, 10, out total, + var entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 0, 10, out total, filter: SqlContext.Query().Where(x => x.Name.Contains("ssss"))).ToArray(); Assert.That(entities.Length, Is.EqualTo(10)); Assert.That(total, Is.EqualTo(10)); - entities = service.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 0, 50, out total, + entities = EntityService.GetPagedDescendants(root.Id, UmbracoObjectTypes.Media, 0, 50, out total, filter: SqlContext.Query().Where(x => x.Name.Contains("tttt"))).ToArray(); Assert.That(entities.Length, Is.EqualTo(50)); Assert.That(total, Is.EqualTo(50)); @@ -475,9 +462,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Find_All_Content_By_UmbracoObjectTypes() { - var service = ServiceContext.EntityService; - - var entities = service.GetAll(UmbracoObjectTypes.Document).ToArray(); + var entities = EntityService.GetAll(UmbracoObjectTypes.Document).ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Length, Is.EqualTo(4)); @@ -487,10 +472,8 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Find_All_Content_By_UmbracoObjectType_Id() { - var service = ServiceContext.EntityService; - var objectTypeId = Constants.ObjectTypes.Document; - var entities = service.GetAll(objectTypeId).ToArray(); + var entities = EntityService.GetAll(objectTypeId).ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Length, Is.EqualTo(4)); @@ -500,9 +483,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Find_All_Content_By_Type() { - var service = ServiceContext.EntityService; - - var entities = service.GetAll().ToArray(); + var entities = EntityService.GetAll().ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Length, Is.EqualTo(4)); @@ -512,9 +493,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Child_Content_By_ParentId_And_UmbracoObjectType() { - var service = ServiceContext.EntityService; - - var entities = service.GetChildren(-1, UmbracoObjectTypes.Document).ToArray(); + var entities = EntityService.GetChildren(-1, UmbracoObjectTypes.Document).ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Length, Is.EqualTo(1)); @@ -524,19 +503,17 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Content_By_UmbracoObjectType_With_Variant_Names() { - var service = ServiceContext.EntityService; - var alias = "test" + Guid.NewGuid(); var contentType = MockedContentTypes.CreateSimpleContentType(alias, alias, false); contentType.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); var c1 = MockedContent.CreateSimpleContent(contentType, "Test", -1); c1.SetCultureName("Test - FR", _langFr.IsoCode); c1.SetCultureName("Test - ES", _langEs.IsoCode); - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); - var result = service.Get(c1.Id, UmbracoObjectTypes.Document); + var result = EntityService.Get(c1.Id, UmbracoObjectTypes.Document); Assert.AreEqual("Test - FR", result.Name); // got name from default culture Assert.IsNotNull(result as IDocumentEntitySlim); var doc = (IDocumentEntitySlim)result; @@ -548,15 +525,13 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Child_Content_By_ParentId_And_UmbracoObjectType_With_Variant_Names() { - var service = ServiceContext.EntityService; - var contentType = MockedContentTypes.CreateSimpleContentType("test1", "Test1", false); contentType.Variations = ContentVariation.Culture; - ServiceContext.ContentTypeService.Save(contentType); + ContentTypeService.Save(contentType); var root = MockedContent.CreateSimpleContent(contentType); root.SetCultureName("Root", _langFr.IsoCode); // else cannot save - ServiceContext.ContentService.Save(root); + ContentService.Save(root); for (int i = 0; i < 10; i++) { @@ -570,10 +545,10 @@ namespace Umbraco.Tests.Services { c1.SetCultureName("Test", _langFr.IsoCode); // else cannot save } - ServiceContext.ContentService.Save(c1); + ContentService.Save(c1); } - var entities = service.GetChildren(root.Id, UmbracoObjectTypes.Document).ToArray(); + var entities = EntityService.GetChildren(root.Id, UmbracoObjectTypes.Document).ToArray(); Assert.AreEqual(10, entities.Length); @@ -601,9 +576,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Children_By_ParentId() { - var service = ServiceContext.EntityService; - - var entities = service.GetChildren(folderId); + var entities = EntityService.GetChildren(folderId); Assert.That(entities.Any(), Is.True); Assert.That(entities.Count(), Is.EqualTo(3)); @@ -613,9 +586,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Descendants_By_ParentId() { - var service = ServiceContext.EntityService; - - var entities = service.GetDescendants(folderId); + var entities = EntityService.GetDescendants(folderId); Assert.That(entities.Any(), Is.True); Assert.That(entities.Count(), Is.EqualTo(4)); @@ -625,19 +596,16 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Throws_When_Getting_All_With_Invalid_Type() { - var service = ServiceContext.EntityService; var objectTypeId = Constants.ObjectTypes.ContentItem; - Assert.Throws(() => service.GetAll()); - Assert.Throws(() => service.GetAll(objectTypeId)); + Assert.Throws(() => EntityService.GetAll()); + Assert.Throws(() => EntityService.GetAll(objectTypeId)); } [Test] public void EntityService_Can_Find_All_ContentTypes_By_UmbracoObjectTypes() { - var service = ServiceContext.EntityService; - - var entities = service.GetAll(UmbracoObjectTypes.DocumentType).ToArray(); + var entities = EntityService.GetAll(UmbracoObjectTypes.DocumentType).ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Count(), Is.EqualTo(1)); @@ -646,10 +614,8 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Find_All_ContentTypes_By_UmbracoObjectType_Id() { - var service = ServiceContext.EntityService; - var objectTypeId = Constants.ObjectTypes.DocumentType; - var entities = service.GetAll(objectTypeId).ToArray(); + var entities = EntityService.GetAll(objectTypeId).ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Count(), Is.EqualTo(1)); @@ -658,9 +624,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Find_All_ContentTypes_By_Type() { - var service = ServiceContext.EntityService; - - var entities = service.GetAll().ToArray(); + var entities = EntityService.GetAll().ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Count(), Is.EqualTo(1)); @@ -669,9 +633,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Find_All_Media_By_UmbracoObjectTypes() { - var service = ServiceContext.EntityService; - - var entities = service.GetAll(UmbracoObjectTypes.Media).ToArray(); + var entities = EntityService.GetAll(UmbracoObjectTypes.Media).ToArray(); Assert.That(entities.Any(), Is.True); Assert.That(entities.Length, Is.EqualTo(5)); @@ -686,9 +648,8 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_ObjectType() - { - var service = ServiceContext.EntityService; - var mediaObjectType = service.GetObjectType(1031); + { ; + var mediaObjectType = EntityService.GetObjectType(1031); Assert.NotNull(mediaObjectType); Assert.AreEqual(mediaObjectType, UmbracoObjectTypes.MediaType); @@ -697,8 +658,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Key_For_Id_With_Unknown_Type() { - var service = ServiceContext.EntityService; - var result = service.GetKey(1061, UmbracoObjectTypes.Unknown); + var result = EntityService.GetKey(1052, UmbracoObjectTypes.Unknown); Assert.IsTrue(result.Success); Assert.AreEqual(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), result.Result); @@ -707,8 +667,7 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Key_For_Id() { - var service = ServiceContext.EntityService; - var result = service.GetKey(1061, UmbracoObjectTypes.DocumentType); + var result = EntityService.GetKey(1052, UmbracoObjectTypes.DocumentType); Assert.IsTrue(result.Success); Assert.AreEqual(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), result.Result); @@ -717,9 +676,8 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Cannot_Get_Key_For_Id_With_Incorrect_Object_Type() { - var service = ServiceContext.EntityService; - var result1 = service.GetKey(1061, UmbracoObjectTypes.DocumentType); - var result2 = service.GetKey(1061, UmbracoObjectTypes.MediaType); + var result1 = EntityService.GetKey(1052, UmbracoObjectTypes.DocumentType); + var result2 = EntityService.GetKey(1052, UmbracoObjectTypes.MediaType); Assert.IsTrue(result1.Success); Assert.IsFalse(result2.Success); @@ -728,29 +686,26 @@ namespace Umbraco.Tests.Services [Test] public void EntityService_Can_Get_Id_For_Key_With_Unknown_Type() { - var service = ServiceContext.EntityService; - var result = service.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.Unknown); + var result = EntityService.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.Unknown); Assert.IsTrue(result.Success); - Assert.AreEqual(1061, result.Result); + Assert.AreEqual(1052, result.Result); } [Test] public void EntityService_Can_Get_Id_For_Key() { - var service = ServiceContext.EntityService; - var result = service.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.DocumentType); + var result = EntityService.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.DocumentType); Assert.IsTrue(result.Success); - Assert.AreEqual(1061, result.Result); + Assert.AreEqual(1052, result.Result); } [Test] public void EntityService_Cannot_Get_Id_For_Key_With_Incorrect_Object_Type() { - var service = ServiceContext.EntityService; - var result1 = service.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.DocumentType); - var result2 = service.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.MediaType); + var result1 = EntityService.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.DocumentType); + var result2 = EntityService.GetId(Guid.Parse("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"), UmbracoObjectTypes.MediaType); Assert.IsTrue(result1.Success); Assert.IsFalse(result2.Success); @@ -759,59 +714,83 @@ namespace Umbraco.Tests.Services [Test] public void ReserveId() { - var service = ServiceContext.EntityService; var guid = Guid.NewGuid(); // can reserve - var reservedId = service.ReserveId(guid); + var reservedId = EntityService.ReserveId(guid); Assert.IsTrue(reservedId > 0); // can get it back - var id = service.GetId(guid, UmbracoObjectTypes.DocumentType); + var id = EntityService.GetId(guid, UmbracoObjectTypes.DocumentType); Assert.IsTrue(id.Success); Assert.AreEqual(reservedId, id.Result); // anything goes - id = service.GetId(guid, UmbracoObjectTypes.Media); + id = EntityService.GetId(guid, UmbracoObjectTypes.Media); Assert.IsTrue(id.Success); Assert.AreEqual(reservedId, id.Result); // a random guid won't work - Assert.IsFalse(service.GetId(Guid.NewGuid(), UmbracoObjectTypes.DocumentType).Success); + Assert.IsFalse(EntityService.GetId(Guid.NewGuid(), UmbracoObjectTypes.DocumentType).Success); } private static bool _isSetup = false; private int folderId; - public override void CreateTestData() + public void CreateTestData() { if (_isSetup == false) { _isSetup = true; - base.CreateTestData(); + //Create and Save ContentType "umbTextpage" -> 1052 + ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + contentType.Key = new Guid("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"); + FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! + ContentTypeService.Save(contentType); - //Create and Save folder-Media -> 1050 - var folderMediaType = ServiceContext.MediaTypeService.Get(1031); + //Create and Save Content "Homepage" based on "umbTextpage" -> 1053 + Content textpage = MockedContent.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 + Content subpage = MockedContent.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 2" based on "umbTextpage" -> 1055 + Content subpage2 = MockedContent.CreateSimpleContent(contentType, "Text Page 2", textpage.Id); + ContentService.Save(subpage2, 0); + + //Create and Save Content "Text Page Deleted" based on "umbTextpage" -> 1056 + Content trashed = MockedContent.CreateSimpleContent(contentType, "Text Page Deleted", -20); + trashed.Trashed = true; + ContentService.Save(trashed, 0); + + //Create and Save folder-Media -> 1057 + var folderMediaType = MediaTypeService.Get(1031); var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1); - ServiceContext.MediaService.Save(folder, 0); + MediaService.Save(folder, 0); folderId = folder.Id; - //Create and Save image-Media -> 1051 - var imageMediaType = ServiceContext.MediaTypeService.Get(1032); + //Create and Save image-Media -> 1058 + var imageMediaType = MediaTypeService.Get(1032); var image = MockedMedia.CreateMediaImage(imageMediaType, folder.Id); - ServiceContext.MediaService.Save(image, 0); + MediaService.Save(image, 0); - //Create and Save file-Media -> 1052 - var fileMediaType = ServiceContext.MediaTypeService.Get(1033); + //Create and Save file-Media -> 1059 + var fileMediaType = MediaTypeService.Get(1033); var file = MockedMedia.CreateMediaFile(fileMediaType, folder.Id); - ServiceContext.MediaService.Save(file, 0); + MediaService.Save(file, 0); + // Create and save sub folder -> 1060 var subfolder = MockedMedia.CreateMediaFolder(folderMediaType, folder.Id); - ServiceContext.MediaService.Save(subfolder, 0); + MediaService.Save(subfolder, 0); + // Create and save sub folder -> 1061 var subfolder2 = MockedMedia.CreateMediaFolder(folderMediaType, subfolder.Id); - ServiceContext.MediaService.Save(subfolder2, 0); + MediaService.Save(subfolder2, 0); } } } diff --git a/src/Umbraco.Tests.Integration/Services/FileServiceTests.cs b/src/Umbraco.Tests.Integration/Services/FileServiceTests.cs new file mode 100644 index 0000000000..52a0b0e654 --- /dev/null +++ b/src/Umbraco.Tests.Integration/Services/FileServiceTests.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using NUnit.Framework; +using Umbraco.Core.Services; +using Umbraco.Tests.Integration.Testing; +using Umbraco.Tests.Testing; + +namespace Umbraco.Tests.Services +{ + [TestFixture] + [Apartment(ApartmentState.STA)] + [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] + public class FileServiceTests : UmbracoIntegrationTest + { + private IFileService FileService => GetRequiredService(); + + [Test] + public void Create_Template_Then_Assign_Child() + { + var child = FileService.CreateTemplateWithIdentity("Child", "child", "test"); + var parent = FileService.CreateTemplateWithIdentity("Parent", "parent", "test"); + + child.SetMasterTemplate(parent); + FileService.SaveTemplate(child); + + child = FileService.GetTemplate(child.Id); + + Assert.AreEqual(parent.Alias, child.MasterTemplateAlias); + + } + + [Test] + public void Create_Template_With_Child_Then_Unassign() + { + var parent = FileService.CreateTemplateWithIdentity("Parent", "parent", "test"); + var child = FileService.CreateTemplateWithIdentity("Child", "child", "test", parent); + + child.SetMasterTemplate(null); + FileService.SaveTemplate(child); + + child = FileService.GetTemplate(child.Id); + + Assert.AreEqual(null, child.MasterTemplateAlias); + } + + [Test] + public void Can_Query_Template_Children() + { + var parent = FileService.CreateTemplateWithIdentity("Parent", "parent", "test"); + var child1 = FileService.CreateTemplateWithIdentity("Child1", "child1", "test", parent); + var child2 = FileService.CreateTemplateWithIdentity("Child2", "child2", "test", parent); + + var children = FileService.GetTemplates(parent.Id).Select(x => x.Id).ToArray(); + + Assert.IsTrue(children.Contains(child1.Id)); + Assert.IsTrue(children.Contains(child2.Id)); + } + + [Test] + public void Create_Template_With_Custom_Alias() + { + var template = FileService.CreateTemplateWithIdentity("Test template", "customTemplateAlias", "test"); + + FileService.SaveTemplate(template); + + template = FileService.GetTemplate(template.Id); + + Assert.AreEqual("Test template", template.Name); + Assert.AreEqual("customTemplateAlias", template.Alias); + } + + } +} diff --git a/src/Umbraco.Tests/Services/KeyValueServiceTests.cs b/src/Umbraco.Tests.Integration/Services/KeyValueServiceTests.cs similarity index 56% rename from src/Umbraco.Tests/Services/KeyValueServiceTests.cs rename to src/Umbraco.Tests.Integration/Services/KeyValueServiceTests.cs index 5ab29258f5..17c601e9ec 100644 --- a/src/Umbraco.Tests/Services/KeyValueServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/KeyValueServiceTests.cs @@ -1,7 +1,7 @@ using System.Threading; using NUnit.Framework; -using NUnit.Framework.Internal; using Umbraco.Core.Services; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; namespace Umbraco.Tests.Services @@ -14,16 +14,15 @@ namespace Umbraco.Tests.Services [TestFixture] [Apartment(ApartmentState.STA)] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class KeyValueServiceTests : TestWithSomeContentBase + public class KeyValueServiceTests : UmbracoIntegrationTest { + private IKeyValueService KeyValueService => GetRequiredService(); + [Test] public void GetValue_ForMissingKey_ReturnsNull() { - // Arrange - var keyValueService = ServiceContext.KeyValueService; - // Act - var value = keyValueService.GetValue("foo"); + var value = KeyValueService.GetValue("foo"); // Assert Assert.IsNull(value); @@ -32,12 +31,10 @@ namespace Umbraco.Tests.Services [Test] public void GetValue_ForExistingKey_ReturnsValue() { - // Arrange - var keyValueService = ServiceContext.KeyValueService; - keyValueService.SetValue("foo", "bar"); + KeyValueService.SetValue("foo", "bar"); // Act - var value = keyValueService.GetValue("foo"); + var value = KeyValueService.GetValue("foo"); // Assert Assert.AreEqual("bar", value); @@ -46,13 +43,11 @@ namespace Umbraco.Tests.Services [Test] public void SetValue_ForExistingKey_SavesValue() { - // Arrange - var keyValueService = ServiceContext.KeyValueService; - keyValueService.SetValue("foo", "bar"); + KeyValueService.SetValue("foo", "bar"); // Act - keyValueService.SetValue("foo", "buzz"); - var value = keyValueService.GetValue("foo"); + KeyValueService.SetValue("foo", "buzz"); + var value = KeyValueService.GetValue("foo"); // Assert Assert.AreEqual("buzz", value); @@ -61,13 +56,11 @@ namespace Umbraco.Tests.Services [Test] public void TrySetValue_ForExistingKeyWithProvidedValue_ReturnsTrueAndSetsValue() { - // Arrange - var keyValueService = ServiceContext.KeyValueService; - keyValueService.SetValue("foo", "bar"); + KeyValueService.SetValue("foo", "bar"); // Act - var result = keyValueService.TrySetValue("foo", "bar", "buzz"); - var value = keyValueService.GetValue("foo"); + var result = KeyValueService.TrySetValue("foo", "bar", "buzz"); + var value = KeyValueService.GetValue("foo"); // Assert Assert.IsTrue(result); @@ -77,13 +70,11 @@ namespace Umbraco.Tests.Services [Test] public void TrySetValue_ForExistingKeyWithoutProvidedValue_ReturnsFalseAndDoesNotSetValue() { - // Arrange - var keyValueService = ServiceContext.KeyValueService; - keyValueService.SetValue("foo", "bar"); + KeyValueService.SetValue("foo", "bar"); // Act - var result = keyValueService.TrySetValue("foo", "bang", "buzz"); - var value = keyValueService.GetValue("foo"); + var result = KeyValueService.TrySetValue("foo", "bang", "buzz"); + var value = KeyValueService.GetValue("foo"); // Assert Assert.IsFalse(result); diff --git a/src/Umbraco.Tests/Services/MacroServiceTests.cs b/src/Umbraco.Tests.Integration/Services/MacroServiceTests.cs similarity index 63% rename from src/Umbraco.Tests/Services/MacroServiceTests.cs rename to src/Umbraco.Tests.Integration/Services/MacroServiceTests.cs index 7679d96f7b..254a7afbb4 100644 --- a/src/Umbraco.Tests/Services/MacroServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/MacroServiceTests.cs @@ -6,27 +6,28 @@ using Moq; using NUnit.Framework; using Umbraco.Core.Cache; using Umbraco.Core.Models; - -using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.Scoping; +using Umbraco.Core.Services; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Services +namespace Umbraco.Tests.Integration.Services { [TestFixture] [Apartment(ApartmentState.STA)] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class MacroServiceTests : TestWithSomeContentBase + public class MacroServiceTests : UmbracoIntegrationTest { - public override void CreateTestData() + private IMacroService MacroService => GetRequiredService(); + [SetUp] + public void SetupTest() { - base.CreateTestData(); - - var provider = TestObjects.GetScopeProvider(LoggerFactory); - using (var scope = provider.CreateScope()) + using (var scope = ScopeProvider.CreateScope()) { - var repository = new MacroRepository((IScopeAccessor) provider, AppCaches.Disabled, Mock.Of>(), ShortStringHelper); + var repository = new MacroRepository((IScopeAccessor) sp, AppCaches.Disabled, Mock.Of>(), ShortStringHelper); repository.Save(new Macro(ShortStringHelper, "test1", "Test1", "~/views/macropartials/test1.cshtml")); repository.Save(new Macro(ShortStringHelper, "test2", "Test2", "~/views/macropartials/test2.cshtml")); @@ -35,22 +36,13 @@ namespace Umbraco.Tests.Services } } - [TearDown] - public override void TearDown() - { - base.TearDown(); - } - [Test] public void Can_Get_By_Alias() { - // Arrange - var macroService = ServiceContext.MacroService; - // Act - var macro = macroService.GetByAlias("test1"); + var macro = MacroService.GetByAlias("test1"); - //assert + // Assert Assert.IsNotNull(macro); Assert.AreEqual("Test1", macro.Name); } @@ -58,37 +50,31 @@ namespace Umbraco.Tests.Services [Test] public void Can_Get_All() { - // Arrange - var macroService = ServiceContext.MacroService; - // Act - var result = macroService.GetAll(); + var result = MacroService.GetAll(); - //assert + // Assert Assert.AreEqual(3, result.Count()); } [Test] public void Can_Create() { - // Arrange - var macroService = ServiceContext.MacroService; - // Act - var macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); - macroService.Save(macro); + var macro = CreateMacro(); + MacroService.Save(macro); - //assert + // Assert Assert.IsTrue(macro.HasIdentity); Assert.Greater(macro.Id, 0); Assert.AreNotEqual(Guid.Empty, macro.Key); - var result = macroService.GetById(macro.Id); + var result = MacroService.GetById(macro.Id); Assert.AreEqual("test", result.Alias); Assert.AreEqual("Test", result.Name); Assert.AreEqual("~/Views/MacroPartials/Test.cshtml", result.MacroSource); Assert.AreEqual(1234, result.CacheDuration); - result = macroService.GetById(macro.Key); + result = MacroService.GetById(macro.Key); Assert.AreEqual("test", result.Alias); Assert.AreEqual("Test", result.Name); Assert.AreEqual("~/Views/MacroPartials/Test.cshtml", result.MacroSource); @@ -99,18 +85,17 @@ namespace Umbraco.Tests.Services public void Can_Delete() { // Arrange - var macroService = ServiceContext.MacroService; var macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); - macroService.Save(macro); + MacroService.Save(macro); // Act - macroService.Delete(macro); + MacroService.Delete(macro); - //assert - var result = macroService.GetById(macro.Id); + // Assert + var result = MacroService.GetById(macro.Id); Assert.IsNull(result); - result = macroService.GetById(macro.Key); + result = MacroService.GetById(macro.Key); Assert.IsNull(result); } @@ -118,20 +103,18 @@ namespace Umbraco.Tests.Services public void Can_Update() { // Arrange - var macroService = ServiceContext.MacroService; - IMacro macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); - macroService.Save(macro); + var macro = CreateMacro(); + MacroService.Save(macro); // Act var currKey = macro.Key; macro.Name = "New name"; macro.Alias = "NewAlias"; - macroService.Save(macro); + MacroService.Save(macro); + macro = MacroService.GetById(macro.Id); - macro = macroService.GetById(macro.Id); - - //assert + // Assert Assert.AreEqual("New name", macro.Name); Assert.AreEqual("NewAlias", macro.Alias); Assert.AreEqual(currKey, macro.Key); @@ -142,10 +125,9 @@ namespace Umbraco.Tests.Services public void Can_Update_Property() { // Arrange - var macroService = ServiceContext.MacroService; - IMacro macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); + var macro = CreateMacro(); macro.Properties.Add(new MacroProperty("blah", "Blah", 0, "blah")); - macroService.Save(macro); + MacroService.Save(macro); Assert.AreNotEqual(Guid.Empty, macro.Properties[0].Key); @@ -155,11 +137,11 @@ namespace Umbraco.Tests.Services macro.Properties[0].Name = "new Name"; macro.Properties[0].SortOrder = 1; macro.Properties[0].EditorAlias = "new"; - macroService.Save(macro); + MacroService.Save(macro); - macro = macroService.GetById(macro.Id); + macro = MacroService.GetById(macro.Id); - //assert + // Assert Assert.AreEqual(1, macro.Properties.Count); Assert.AreEqual(currPropKey, macro.Properties[0].Key); Assert.AreEqual("new Alias", macro.Properties[0].Alias); @@ -173,12 +155,11 @@ namespace Umbraco.Tests.Services public void Can_Update_Remove_Property() { // Arrange - var macroService = ServiceContext.MacroService; - IMacro macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); + var macro = CreateMacro(); macro.Properties.Add(new MacroProperty("blah1", "Blah1", 0, "blah1")); macro.Properties.Add(new MacroProperty("blah2", "Blah2", 1, "blah2")); macro.Properties.Add(new MacroProperty("blah3", "Blah3", 2, "blah3")); - macroService.Save(macro); + MacroService.Save(macro); var lastKey = macro.Properties[0].Key; for (var i = 1; i < macro.Properties.Count; i++) @@ -197,11 +178,11 @@ namespace Umbraco.Tests.Services var allPropKeys = macro.Properties.Values.Select(x => new { x.Alias, x.Key }).ToArray(); - macroService.Save(macro); + MacroService.Save(macro); - macro = macroService.GetById(macro.Id); + macro = MacroService.GetById(macro.Id); - //assert + // Assert Assert.AreEqual(2, macro.Properties.Count); Assert.AreEqual("newAlias", macro.Properties["newAlias"].Alias); Assert.AreEqual("new Name", macro.Properties["newAlias"].Name); @@ -211,39 +192,36 @@ namespace Umbraco.Tests.Services { Assert.AreEqual(propKey.Key, macro.Properties[propKey.Alias].Key); } - } [Test] public void Can_Add_And_Remove_Properties() { - var macroService = ServiceContext.MacroService; - var macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); + var macro = CreateMacro(); - //adds some properties + // Adds some properties macro.Properties.Add(new MacroProperty("blah1", "Blah1", 0, "blah1")); macro.Properties.Add(new MacroProperty("blah2", "Blah2", 0, "blah2")); macro.Properties.Add(new MacroProperty("blah3", "Blah3", 0, "blah3")); macro.Properties.Add(new MacroProperty("blah4", "Blah4", 0, "blah4")); - macroService.Save(macro); + MacroService.Save(macro); - var result1 = macroService.GetById(macro.Id); + var result1 = MacroService.GetById(macro.Id); Assert.AreEqual(4, result1.Properties.Values.Count()); - //simulate clearing the sections + // Simulate clearing the sections foreach (var s in result1.Properties.Values.ToArray()) { result1.Properties.Remove(s.Alias); } - //now just re-add a couple + + // Now just re-add a couple result1.Properties.Add(new MacroProperty("blah3", "Blah3", 0, "blah3")); result1.Properties.Add(new MacroProperty("blah4", "Blah4", 0, "blah4")); - macroService.Save(result1); + MacroService.Save(result1); - //assert - - //re-get - result1 = macroService.GetById(result1.Id); + // Assert + result1 = MacroService.GetById(result1.Id); Assert.AreEqual(2, result1.Properties.Values.Count()); } @@ -252,25 +230,20 @@ namespace Umbraco.Tests.Services public void Cannot_Save_Macro_With_Empty_Name() { // Arrange - var macroService = ServiceContext.MacroService; - var macro = new Macro(ShortStringHelper, "test", string.Empty, "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234); + var macro = CreateMacro(name: string.Empty); // Act & Assert - Assert.Throws(() => macroService.Save(macro)); + Assert.Throws(() => MacroService.Save(macro)); } - //[Test] - //public void Can_Get_Many_By_Alias() - //{ - // // Arrange - // var macroService = ServiceContext.MacroService; - - // // Act - // var result = macroService.GetAll("test1", "test2"); - - // //assert - // Assert.AreEqual(2, result.Count()); - //} - + private static IMacro CreateMacro(string name = "Test") + { + return new MacroBuilder() + .WithAlias("test") + .WithName(name) + .WithSource("~/Views/MacroPartials/Test.cshtml") + .WithCacheDuration(1234) + .Build(); + } } } diff --git a/src/Umbraco.Tests.Integration/Services/SectionServiceTests.cs b/src/Umbraco.Tests.Integration/Services/SectionServiceTests.cs index 533a66ad96..f34ea32cff 100644 --- a/src/Umbraco.Tests.Integration/Services/SectionServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/SectionServiceTests.cs @@ -1,17 +1,14 @@ -using NUnit.Framework; -using System.Linq; +using System.Linq; using System.Threading; -using Umbraco.Core; -using Umbraco.Core.Composing; +using NUnit.Framework; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.Membership; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; using Umbraco.Web.Services; -namespace Umbraco.Tests.Services +namespace Umbraco.Tests.Integration.Services { /// /// Tests covering the SectionService diff --git a/src/Umbraco.Tests.Integration/Services/TagServiceTests.cs b/src/Umbraco.Tests.Integration/Services/TagServiceTests.cs index db2c8196e7..585c1319a4 100644 --- a/src/Umbraco.Tests.Integration/Services/TagServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/TagServiceTests.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.Integration.Services private IContentTypeService ContentTypeService => GetRequiredService(); private ITagService TagService => GetRequiredService(); private IDataTypeService DataTypeService => GetRequiredService(); - public PropertyEditorCollection PropertyEditorCollection => GetRequiredService(); + private PropertyEditorCollection PropertyEditorCollection => GetRequiredService(); [Test] public void TagApiConsistencyTest() diff --git a/src/Umbraco.Tests.Integration/Services/UserServiceTests.cs b/src/Umbraco.Tests.Integration/Services/UserServiceTests.cs index 64bd89c8f8..fbe51da837 100644 --- a/src/Umbraco.Tests.Integration/Services/UserServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/UserServiceTests.cs @@ -12,11 +12,12 @@ using Umbraco.Core.Models.Membership; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; using Umbraco.Web.Actions; -using MockedUser = Umbraco.Tests.Common.TestHelpers.Entities.MockedUser; namespace Umbraco.Tests.Integration.Services { @@ -495,10 +496,10 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Find_By_Email_Starts_With() { - var users = MockedUser.CreateMulipleUsers(10); + var users = CreateMulipleUsers(10); UserService.Save(users); //don't find this - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); customUser.Email = "hello@hello.com"; UserService.Save(customUser); @@ -510,10 +511,10 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Find_By_Email_Ends_With() { - var users = MockedUser.CreateMulipleUsers(10); + var users = CreateMulipleUsers(10); UserService.Save(users); //include this - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); customUser.Email = "hello@test.com"; UserService.Save(customUser); @@ -525,10 +526,10 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Find_By_Email_Contains() { - var users = MockedUser.CreateMulipleUsers(10); + var users = CreateMulipleUsers(10); UserService.Save(users); //include this - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); customUser.Email = "hello@test.com"; UserService.Save(customUser); @@ -540,10 +541,10 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Find_By_Email_Exact() { - var users = MockedUser.CreateMulipleUsers(10); + var users = CreateMulipleUsers(10); UserService.Save(users); //include this - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); customUser.Email = "hello@test.com"; UserService.Save(customUser); @@ -555,7 +556,7 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Get_All_Paged_Users() { - var users = MockedUser.CreateMulipleUsers(10); + var users = CreateMulipleUsers(10); UserService.Save(users); var found = UserService.GetAll(0, 2, out var totalRecs); @@ -570,7 +571,7 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Get_All_Paged_Users_With_Filter() { - var users = MockedUser.CreateMulipleUsers(10).ToArray(); + var users = CreateMulipleUsers(10).ToArray(); UserService.Save(users); var found = UserService.GetAll(0, 2, out var totalRecs, "username", Direction.Ascending, filter: "test"); @@ -587,7 +588,7 @@ namespace Umbraco.Tests.Integration.Services var userGroup = MockedUserGroup.CreateUserGroup(); UserService.Save(userGroup); - var users = MockedUser.CreateMulipleUsers(10).ToArray(); + var users = CreateMulipleUsers(10).ToArray(); for (var i = 0; i < 10;) { users[i].AddGroup(userGroup.ToReadOnlyGroup()); @@ -610,7 +611,7 @@ namespace Umbraco.Tests.Integration.Services var userGroup = MockedUserGroup.CreateUserGroup(); UserService.Save(userGroup); - var users = MockedUser.CreateMulipleUsers(10).ToArray(); + var users = CreateMulipleUsers(10).ToArray(); for (var i = 0; i < 10;) { users[i].AddGroup(userGroup.ToReadOnlyGroup()); @@ -635,9 +636,9 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Count_All_Users() { - var users = MockedUser.CreateMulipleUsers(10); + var users = CreateMulipleUsers(10); UserService.Save(users); - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); UserService.Save(customUser); var found = UserService.GetCount(MemberCountType.All); @@ -650,20 +651,20 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Count_All_Online_Users() { - var users = MockedUser.CreateMulipleUsers(10, (i, member) => member.LastLoginDate = DateTime.Now.AddMinutes(i * -2)); + var users = CreateMulipleUsers(10, (i, member) => member.LastLoginDate = DateTime.Now.AddMinutes(i * -2)); UserService.Save(users); - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); throw new NotImplementedException(); } [Test] public void Count_All_Locked_Users() { - var users = MockedUser.CreateMulipleUsers(10, (i, member) => member.IsLockedOut = i % 2 == 0); + var users = CreateMulipleUsers(10, (i, member) => member.IsLockedOut = i % 2 == 0); UserService.Save(users); - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); customUser.IsLockedOut = true; UserService.Save(customUser); @@ -675,10 +676,10 @@ namespace Umbraco.Tests.Integration.Services [Test] public void Count_All_Approved_Users() { - var users = MockedUser.CreateMulipleUsers(10, (i, member) => member.IsApproved = i % 2 == 0); + var users = CreateMulipleUsers(10, (i, member) => member.IsApproved = i % 2 == 0); UserService.Save(users); - var customUser = MockedUser.CreateUser(); + var customUser = CreateUser(); customUser.IsApproved = false; UserService.Save(customUser); @@ -896,7 +897,7 @@ namespace Umbraco.Tests.Integration.Services public void Get_By_Profile_Id() { // Arrange - var user = (IUser)UserService.CreateUserWithIdentity("test1", "test1@test.com"); + var user = UserService.CreateUserWithIdentity("test1", "test1@test.com"); // Act var profile = UserService.GetProfileById((int)user.Id); @@ -908,7 +909,7 @@ namespace Umbraco.Tests.Integration.Services } [Test] - public void Get_By_Profile_Id_Must_return_null_if_user_not_exists() + public void Get_By_Profile_Id_Must_Return_Null_If_User_Does_Not_Exist() { var profile = UserService.GetProfileById(42); @@ -917,7 +918,7 @@ namespace Umbraco.Tests.Integration.Services } [Test] - public void GetProfilesById_Must_empty_if_users_not_exists() + public void GetProfilesById_Must_Return_Empty_If_User_Does_Not_Exist() { var profiles = UserService.GetProfilesById(42); @@ -983,6 +984,39 @@ namespace Umbraco.Tests.Integration.Services return startContentItems.ToArray(); } + private static IEnumerable CreateMulipleUsers(int amount, Action onCreating = null) + { + var list = new List(); + + for (var i = 0; i < amount; i++) + { + var name = "User No-" + i; + var user = new UserBuilder() + .WithName(name) + .WithEmail("test" + i + "@test.com") + .WithLogin("test" + i, "test" + i) + .Build(); + + onCreating?.Invoke(i, user); + + user.ResetDirtyProperties(false); + + list.Add(user); + } + + return list; + } + + private static User CreateUser(string suffix = "") + { + return new UserBuilder() + .WithIsApproved(true) + .WithName("TestUser" + suffix) + .WithLogin("TestUser" + suffix, "testing") + .WithEmail("test" + suffix + "@test.com") + .Build(); + } + private IUser CreateTestUser(out IUserGroup userGroup) { userGroup = CreateTestUserGroup(); @@ -1018,19 +1052,16 @@ namespace Umbraco.Tests.Integration.Services private UserGroup CreateTestUserGroup(string alias = "testGroup", string name = "Test Group") { - var userGroup = new UserGroup(ShortStringHelper) - { - Alias = alias, - Name = name, - Permissions = "ABCDEFGHIJ1234567".ToCharArray().Select(x => x.ToString()) - }; - - userGroup.AddAllowedSection("content"); - userGroup.AddAllowedSection("media"); + var userGroup = new UserGroupBuilder() + .WithAlias(alias) + .WithName(name) + .WithPermissions("ABCDEFGHIJ1234567") + .WithAllowedSections(new[] { "content", "media" }) + .Build(); UserService.Save(userGroup); - return userGroup; + return (UserGroup)userGroup; } } } diff --git a/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs b/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs index 83a6938669..e597158992 100644 --- a/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs +++ b/src/Umbraco.Tests.Integration/Testing/IntegrationTestComposer.cs @@ -1,6 +1,7 @@ using Moq; using NUnit.Framework; using System; +using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.Extensions.Logging; @@ -15,6 +16,7 @@ using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; +using Umbraco.Core.Sync; using Umbraco.Core.WebAssets; using Umbraco.Examine; using Umbraco.Web.Compose; @@ -51,6 +53,10 @@ namespace Umbraco.Tests.Integration.Testing // replace this service so that it can lookup the correct file locations composition.RegisterUnique(GetLocalizedTextService); + + composition.RegisterUnique(); + + } /// @@ -101,5 +107,51 @@ namespace Umbraco.Tests.Integration.Testing } } + private class NoopServerMessenger : IServerMessenger + { + public NoopServerMessenger() + { } + + public void PerformRefresh(ICacheRefresher refresher, TPayload[] payload) + { + + } + + public void PerformRefresh(ICacheRefresher refresher, Func getNumericId, params T[] instances) + { + + } + + public void PerformRefresh(ICacheRefresher refresher, Func getGuidId, params T[] instances) + { + + } + + public void PerformRemove(ICacheRefresher refresher, Func getNumericId, params T[] instances) + { + + } + + public void PerformRemove(ICacheRefresher refresher, params int[] numericIds) + { + + } + + public void PerformRefresh(ICacheRefresher refresher, params int[] numericIds) + { + + } + + public void PerformRefresh(ICacheRefresher refresher, params Guid[] guidIds) + { + + } + + public void PerformRefreshAll(ICacheRefresher refresher) + { + + } + } + } } diff --git a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs index 5936b52b50..f2cb917ed1 100644 --- a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs +++ b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs @@ -50,7 +50,6 @@ namespace Umbraco.Tests.Integration.Testing [NonParallelizable] public abstract class UmbracoIntegrationTest { - public static LightInjectContainer CreateUmbracoContainer(out UmbracoServiceProviderFactory serviceProviderFactory) { var container = UmbracoServiceProviderFactory.CreateServiceContainer(); @@ -82,6 +81,8 @@ namespace Umbraco.Tests.Integration.Testing { foreach (var a in _testTeardown) a(); _testTeardown = null; + FirstTestInFixture = false; + FirstTestInSession = false; } [SetUp] @@ -278,7 +279,7 @@ namespace Umbraco.Tests.Integration.Testing Services.GetRequiredService().EnsureBackofficeSecurity(); Services.GetRequiredService().EnsureUmbracoContext(); - // get the currently set ptions + // get the currently set options var testOptions = TestOptionAttributeBase.GetTestOptions(); if (testOptions.Boot) { @@ -399,12 +400,26 @@ namespace Umbraco.Tests.Integration.Testing break; case UmbracoTestOptions.Database.NewSchemaPerFixture: + // Only attach schema once per fixture + // Doing it more than once will block the process since the old db hasn't been detached + // and it would be the same as NewSchemaPerTest even if it didn't block + if (FirstTestInFixture) + { + // New DB + Schema + var newSchemaFixtureDbId = db.AttachSchema(); - // New DB + Schema - var newSchemaFixtureDbId = db.AttachSchema(); + // Add teardown callback + OnFixtureTearDown(() => db.Detach(newSchemaFixtureDbId)); + } - // Add teardown callback - OnFixtureTearDown(() => db.Detach(newSchemaFixtureDbId)); + // We must re-configure our current factory since attaching a new LocalDb from the pool changes connection strings + if (!databaseFactory.Configured) + { + databaseFactory.Configure(db.ConnectionString, Constants.DatabaseProviders.SqlServer); + } + + // re-run the runtime level check + runtimeState.DetermineRuntimeLevel(); break; case UmbracoTestOptions.Database.NewEmptyPerFixture: @@ -474,5 +489,9 @@ namespace Umbraco.Tests.Integration.Testing protected UserGroupBuilder UserGroupBuilder = new UserGroupBuilder(); #endregion + + protected static bool FirstTestInSession = true; + + protected bool FirstTestInFixture = true; } } diff --git a/src/Umbraco.Tests/Packaging/PackageExtractionTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Packaging/PackageExtractionTests.cs similarity index 76% rename from src/Umbraco.Tests/Packaging/PackageExtractionTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Packaging/PackageExtractionTests.cs index 20efc422f4..ad76b060ce 100644 --- a/src/Umbraco.Tests/Packaging/PackageExtractionTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Packaging/PackageExtractionTests.cs @@ -1,11 +1,9 @@ -using System; -using System.IO; +using System.IO; using System.Linq; +using Moq; using NUnit.Framework; -using Umbraco.Core.Composing; -using Umbraco.Core.IO; +using Umbraco.Core.Hosting; using Umbraco.Core.Packaging; -using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Packaging { @@ -16,9 +14,9 @@ namespace Umbraco.Tests.Packaging private static FileInfo GetTestPackagePath(string packageName) { - const string testPackagesDirName = "Packaging\\Packages"; - var hosting = TestHelper.GetHostingEnvironment(); - string path = Path.Combine(hosting.ApplicationPhysicalPath, testPackagesDirName, packageName); + const string testPackagesDirName = "Umbraco.Core\\Packaging\\Packages"; + var testDir = TestContext.CurrentContext.TestDirectory.Split("bin")[0]; + var path = Path.Combine(testDir, testPackagesDirName, packageName); return new FileInfo(path); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Packaging/Packages/Document_Type_Picker_1.1.umb b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Packaging/Packages/Document_Type_Picker_1.1.umb new file mode 100644 index 0000000000..18449bd373 Binary files /dev/null and b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Packaging/Packages/Document_Type_Picker_1.1.umb differ diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceExtensionsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/ContentTypeServiceExtensionsTests.cs similarity index 98% rename from src/Umbraco.Tests/Services/ContentTypeServiceExtensionsTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/ContentTypeServiceExtensionsTests.cs index d0f817542b..c37d5c9427 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceExtensionsTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/ContentTypeServiceExtensionsTests.cs @@ -5,15 +5,16 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Services; +using Umbraco.Core.Strings; using Umbraco.Tests.TestHelpers.Entities; -using Umbraco.Tests.Testing; namespace Umbraco.Tests.Services { [TestFixture] - [UmbracoTest(WithApplication = true)] - public class ContentTypeServiceExtensionsTests : UmbracoTestBase + public class ContentTypeServiceExtensionsTests { + private IShortStringHelper ShortStringHelper => new DefaultShortStringHelper(new DefaultShortStringHelperConfig()); + [Test] public void GetAvailableCompositeContentTypes_No_Overlap_By_Content_Type_And_Property_Type_Alias() { diff --git a/src/Umbraco.Tests/Services/LocalizedTextServiceTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/LocalizedTextServiceTests.cs similarity index 99% rename from src/Umbraco.Tests/Services/LocalizedTextServiceTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/LocalizedTextServiceTests.cs index f78008c8c7..d413481475 100644 --- a/src/Umbraco.Tests/Services/LocalizedTextServiceTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/LocalizedTextServiceTests.cs @@ -2,14 +2,10 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Xml.Linq; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using Moq; using NUnit.Framework; -using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; namespace Umbraco.Tests.Services diff --git a/src/Umbraco.Tests/Services/PropertyValidationServiceTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/PropertyValidationServiceTests.cs similarity index 98% rename from src/Umbraco.Tests/Services/PropertyValidationServiceTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/PropertyValidationServiceTests.cs index 7b1dbc216d..8a7bad3d8c 100644 --- a/src/Umbraco.Tests/Services/PropertyValidationServiceTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Services/PropertyValidationServiceTests.cs @@ -7,14 +7,15 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.Validators; using Umbraco.Core.Services; using Umbraco.Core.Strings; -using Umbraco.Tests.Testing; using Umbraco.Web.PropertyEditors; namespace Umbraco.Tests.Services { [TestFixture] - public class PropertyValidationServiceTests : UmbracoTestBase + public class PropertyValidationServiceTests { + private IShortStringHelper ShortStringHelper => new DefaultShortStringHelper(new DefaultShortStringHelperConfig()); + private void MockObjects(out PropertyValidationService validationService, out IDataType dt) { var textService = new Mock(); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Editors/UserEditorAuthorizationHelperTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Editors/UserEditorAuthorizationHelperTests.cs index 187e3cccd2..2fd0c7b8ea 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Editors/UserEditorAuthorizationHelperTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Editors/UserEditorAuthorizationHelperTests.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Moq; using NUnit.Framework; using Umbraco.Core; @@ -10,8 +7,8 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Services; -using Umbraco.Tests.Common.TestHelpers.Entities; -using Umbraco.Tests.TestHelpers.Entities; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Web.Editors; namespace Umbraco.Tests.Web.Controllers @@ -22,8 +19,8 @@ namespace Umbraco.Tests.Web.Controllers [Test] public void Admin_Is_Authorized() { - var currentUser = GetAdminUser(); - var savingUser = MockedUser.GetUserMock(); + var currentUser = CreateAdminUser(); + var savingUser = CreateUser(); var contentService = new Mock(); var mediaService = new Mock(); @@ -36,7 +33,7 @@ namespace Umbraco.Tests.Web.Controllers userService.Object, entityService.Object); - var result = authHelper.IsAuthorized(currentUser, savingUser.Object, new int[0], new int[0], new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new string[0]); Assert.IsTrue(result.Success); } @@ -44,8 +41,8 @@ namespace Umbraco.Tests.Web.Controllers [Test] public void Non_Admin_Cannot_Save_Admin() { - var currentUser = MockedUser.GetUserMock(); - var savingUser = GetAdminUser(); + var currentUser = CreateUser(); + var savingUser = CreateAdminUser(); var contentService = new Mock(); var mediaService = new Mock(); @@ -58,7 +55,7 @@ namespace Umbraco.Tests.Web.Controllers userService.Object, entityService.Object); - var result = authHelper.IsAuthorized(currentUser.Object, savingUser, new int[0], new int[0], new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new string[0]); Assert.IsFalse(result.Success); } @@ -66,12 +63,8 @@ namespace Umbraco.Tests.Web.Controllers [Test] public void Cannot_Grant_Group_Membership_Without_Being_A_Member() { - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.Groups).Returns(new[] - { - new ReadOnlyUserGroup(1, "Test", "icon-user", null, null, "test", new string[0], new string[0]) - }); - var savingUser = MockedUser.GetUserMock(); + var currentUser = CreateUser(withGroup: true); + var savingUser = CreateUser(); var contentService = new Mock(); var mediaService = new Mock(); @@ -84,7 +77,7 @@ namespace Umbraco.Tests.Web.Controllers userService.Object, entityService.Object); - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new int[0], new[] {"FunGroup"}); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new[] {"FunGroup"}); Assert.IsFalse(result.Success); } @@ -92,12 +85,8 @@ namespace Umbraco.Tests.Web.Controllers [Test] public void Can_Grant_Group_Membership_With_Being_A_Member() { - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.Groups).Returns(new[] - { - new ReadOnlyUserGroup(1, "Test", "icon-user", null, null, "test", new string[0], new string[0]) - }); - var savingUser = MockedUser.GetUserMock(); + var currentUser = CreateUser(withGroup: true); + var savingUser = CreateUser(); var contentService = new Mock(); var mediaService = new Mock(); @@ -110,7 +99,7 @@ namespace Umbraco.Tests.Web.Controllers userService.Object, entityService.Object); - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new int[0], new[] { "test" }); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new[] { "test" }); Assert.IsTrue(result.Success); } @@ -126,10 +115,8 @@ namespace Umbraco.Tests.Web.Controllers {4567, "-1,4567"}, }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); - savingUser.Setup(x => x.StartContentIds).Returns(new[] { 1234 }); + var currentUser = CreateUser(startContentIds: new[] { 9876 }); + var savingUser = CreateUser(startContentIds: new[] { 1234 }); var contentService = new Mock(); contentService.Setup(x => x.GetById(It.IsAny())) @@ -150,7 +137,7 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //adding 5555 which currentUser has access to since it's a child of 9876 ... adding is still ok even though currentUser doesn't have access to 1234 - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new[] { 1234, 5555 }, new int[0], new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 1234, 5555 }, new int[0], new string[0]); Assert.IsTrue(result.Success); } @@ -166,10 +153,8 @@ namespace Umbraco.Tests.Web.Controllers {4567, "-1,4567"}, }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); - savingUser.Setup(x => x.StartContentIds).Returns(new[] { 1234, 4567 }); + var currentUser = CreateUser(startContentIds: new[] { 9876 }); + var savingUser = CreateUser(startContentIds: new[] { 1234, 4567 }); var contentService = new Mock(); contentService.Setup(x => x.GetById(It.IsAny())) @@ -190,7 +175,7 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //removing 4567 start node even though currentUser doesn't have acces to it ... removing is ok - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new[] { 1234 }, new int[0], new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 1234 }, new int[0], new string[0]); Assert.IsTrue(result.Success); } @@ -206,9 +191,8 @@ namespace Umbraco.Tests.Web.Controllers {4567, "-1,4567"}, }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); + var currentUser = CreateUser(startContentIds: new[] { 9876 }); + var savingUser = CreateUser(); var contentService = new Mock(); contentService.Setup(x => x.GetById(It.IsAny())) @@ -229,7 +213,7 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //adding 1234 but currentUser doesn't have access to it ... nope - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new []{1234}, new int[0], new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new []{1234}, new int[0], new string[0]); Assert.IsFalse(result.Success); } @@ -245,9 +229,8 @@ namespace Umbraco.Tests.Web.Controllers {4567, "-1,4567"}, }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); + var currentUser = CreateUser(startContentIds: new[] { 9876 }); + var savingUser = CreateUser(); var contentService = new Mock(); contentService.Setup(x => x.GetById(It.IsAny())) @@ -268,7 +251,7 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //adding 5555 which currentUser has access to since it's a child of 9876 ... ok - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new[] { 5555 }, new int[0], new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 5555 }, new int[0], new string[0]); Assert.IsTrue(result.Success); } @@ -285,9 +268,8 @@ namespace Umbraco.Tests.Web.Controllers }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); + var currentUser = CreateUser(startMediaIds: new[] { 9876 }); + var savingUser = CreateUser(); var contentService = new Mock(); var mediaService = new Mock(); @@ -308,7 +290,7 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //adding 1234 but currentUser doesn't have access to it ... nope - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] {1234}, new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] {1234}, new string[0]); Assert.IsFalse(result.Success); } @@ -324,9 +306,8 @@ namespace Umbraco.Tests.Web.Controllers {4567, "-1,4567"}, }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartMediaIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); + var currentUser = CreateUser(startMediaIds: new[] { 9876 }); + var savingUser = CreateUser(); var contentService = new Mock(); var mediaService = new Mock(); @@ -347,7 +328,7 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //adding 5555 which currentUser has access to since it's a child of 9876 ... ok - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] { 5555 }, new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 5555 }, new string[0]); Assert.IsTrue(result.Success); } @@ -363,10 +344,8 @@ namespace Umbraco.Tests.Web.Controllers {4567, "-1,4567"}, }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartMediaIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); - savingUser.Setup(x => x.StartMediaIds).Returns(new[] { 1234 }); + var currentUser = CreateUser(startMediaIds: new[] { 9876 }); + var savingUser = CreateUser(startMediaIds: new[] { 1234 }); var contentService = new Mock(); var mediaService = new Mock(); @@ -387,7 +366,7 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //adding 5555 which currentUser has access to since it's a child of 9876 ... adding is still ok even though currentUser doesn't have access to 1234 - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] { 1234, 5555 }, new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 1234, 5555 }, new string[0]); Assert.IsTrue(result.Success); } @@ -403,10 +382,8 @@ namespace Umbraco.Tests.Web.Controllers {4567, "-1,4567"}, }; - var currentUser = MockedUser.GetUserMock(); - currentUser.Setup(x => x.StartMediaIds).Returns(new[] { 9876 }); - var savingUser = MockedUser.GetUserMock(); - savingUser.Setup(x => x.StartMediaIds).Returns(new[] { 1234, 4567 }); + var currentUser = CreateUser(startMediaIds: new[] { 9876 }); + var savingUser = CreateUser(startMediaIds: new[] { 1234, 4567 }); var contentService = new Mock(); var mediaService = new Mock(); @@ -427,19 +404,37 @@ namespace Umbraco.Tests.Web.Controllers entityService.Object); //removing 4567 start node even though currentUser doesn't have acces to it ... removing is ok - var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] { 1234 }, new string[0]); + var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 1234 }, new string[0]); Assert.IsTrue(result.Success); } - private IUser GetAdminUser() + private static IUser CreateUser(bool withGroup = false, int[] startContentIds = null, int[] startMediaIds = null) { - var admin = MockedUser.GetUserMock(); - admin.Setup(x => x.Groups).Returns(new[] + var builder = new UserBuilder() + .WithStartContentIds(startContentIds != null ? startContentIds : new int[0]) + .WithStartMediaIds(startMediaIds != null ? startMediaIds : new int[0]); + if (withGroup) { - new ReadOnlyUserGroup(1, "Admin", "icon-user", null, null, Constants.Security.AdminGroupAlias, new string[0], new string[0]) - }); - return admin.Object; + builder = (UserBuilder)builder + .AddUserGroup() + .WithName("Test") + .WithAlias("test") + .Done(); + } + + return builder.Build(); + } + + private static IUser CreateAdminUser() + { + return new UserBuilder() + .AddUserGroup() + .WithId(1) + .WithName("Admin") + .WithAlias(Constants.Security.AdminGroupAlias) + .Done() + .Build(); } } } diff --git a/src/Umbraco.Tests/Services/AmbiguousEventTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Services/AmbiguousEventTests.cs similarity index 97% rename from src/Umbraco.Tests/Services/AmbiguousEventTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Services/AmbiguousEventTests.cs index e137da1188..6eebf5d237 100644 --- a/src/Umbraco.Tests/Services/AmbiguousEventTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Services/AmbiguousEventTests.cs @@ -5,7 +5,7 @@ using NUnit.Framework; using Umbraco.Core.Events; using Umbraco.Core.Services.Implement; -namespace Umbraco.Tests.Services +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Services { [TestFixture] public class AmbiguousEventTests @@ -75,4 +75,4 @@ namespace Umbraco.Tests.Services } } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/UserGroupBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/UserGroupBuilderTests.cs index 2cd2887878..0cfa0649ff 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/UserGroupBuilderTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/UserGroupBuilderTests.cs @@ -1,4 +1,4 @@ -using System; +using System.Linq; using NUnit.Framework; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; @@ -41,7 +41,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders Assert.AreEqual(testName, userGroup.Name); Assert.AreEqual(testUserCount, userGroup.UserCount); Assert.AreEqual(testIcon, userGroup.Icon); - Assert.AreEqual(testPermissions, string.Join(string.Empty, userGroup.Permissions)); + Assert.AreEqual(testPermissions.Length, userGroup.Permissions.Count()); Assert.AreEqual(testStartContentId, userGroup.StartContentId); Assert.AreEqual(testStartMediaId, userGroup.StartMediaId); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/ContentControllerUnitTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/ContentControllerUnitTests.cs index 56f52215a2..2f76db452a 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/ContentControllerUnitTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/ContentControllerUnitTests.cs @@ -1,27 +1,23 @@ -using System.Collections.Generic; -using Moq; +using Moq; using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Security; using Umbraco.Core.Services; -using Umbraco.Tests.Common.TestHelpers.Entities; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; namespace Umbraco.Tests.Web.Controllers { [TestFixture] public class ContentControllerUnitTests { - [Test] public void Access_Allowed_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(id: 9); var contentMock = new Mock(); contentMock.Setup(c => c.Path).Returns("-1,1234,5678"); var content = contentMock.Object; @@ -44,9 +40,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Content_Found() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - var user = userMock.Object; + var user = CreateUser(id: 9); var contentMock = new Mock(); contentMock.Setup(c => c.Path).Returns("-1,1234,5678"); var content = contentMock.Object; @@ -72,10 +66,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - userMock.Setup(u => u.StartContentIds).Returns(new[] { 9876 }); - var user = userMock.Object; + var user = CreateUser(id: 9, startContentId: 9876); var contentMock = new Mock(); contentMock.Setup(c => c.Path).Returns("-1,1234,5678"); var content = contentMock.Object; @@ -103,9 +94,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_By_Permission() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - var user = userMock.Object; + var user = CreateUser(id: 9); var contentMock = new Mock(); contentMock.Setup(c => c.Path).Returns("-1,1234,5678"); var content = contentMock.Object; @@ -134,10 +123,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_Allowed_By_Permission() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(id: 9); var contentMock = new Mock(); contentMock.Setup(c => c.Path).Returns("-1,1234,5678"); var content = contentMock.Object; @@ -166,10 +152,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Root_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(); var contentServiceMock = new Mock(); var contentService = contentServiceMock.Object; var userServiceMock = new Mock(); @@ -188,10 +171,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(); var contentServiceMock = new Mock(); var contentService = contentServiceMock.Object; var userServiceMock = new Mock(); @@ -210,10 +190,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 }); - var user = userMock.Object; + var user = CreateUser(startContentId: 1234); var contentServiceMock = new Mock(); var contentService = contentServiceMock.Object; var userServiceMock = new Mock(); @@ -234,10 +211,8 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Root_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 }); - var user = userMock.Object; + var user = CreateUser(startContentId: 1234); + var contentServiceMock = new Mock(); var contentService = contentServiceMock.Object; var userServiceMock = new Mock(); @@ -258,10 +233,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Root_By_Permission() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(); var userServiceMock = new Mock(); var permissions = new EntityPermissionCollection @@ -276,7 +248,6 @@ namespace Umbraco.Tests.Web.Controllers var entityServiceMock = new Mock(); var entityService = entityServiceMock.Object; - //act var result = ContentPermissionsHelper.CheckPermissions(-1, user, userService, contentService, entityService, out var foundContent, new[] { 'A' }); @@ -288,9 +259,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Root_By_Permission() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - var user = userMock.Object; + var user = CreateUser(withUserGroup: false); var userServiceMock = new Mock(); var permissions = new EntityPermissionCollection @@ -316,10 +285,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Recycle_Bin_By_Permission() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(); var userServiceMock = new Mock(); var permissions = new EntityPermissionCollection @@ -346,9 +312,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Recycle_Bin_By_Permission() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - var user = userMock.Object; + var user = CreateUser(withUserGroup: false); var userServiceMock = new Mock(); var permissions = new EntityPermissionCollection @@ -369,6 +333,24 @@ namespace Umbraco.Tests.Web.Controllers //assert Assert.AreEqual(ContentPermissionsHelper.ContentAccess.Denied, result); } + + private IUser CreateUser(int id = 0, int? startContentId = null, bool withUserGroup = true) + { + var builder = new UserBuilder() + .WithId(id) + .WithStartContentIds(startContentId.HasValue ? new[] { startContentId.Value } : new int[0]); + if (withUserGroup) + { + builder = builder + .AddUserGroup() + .WithId(1) + .WithName("admin") + .WithAlias("admin") + .Done(); + } + + return builder.Build(); + } } //NOTE: The below self hosted stuff does work so need to get some tests written. Some are not possible atm because diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MediaControllerUnitTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MediaControllerUnitTests.cs index aef08cec5a..91305e463c 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MediaControllerUnitTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MediaControllerUnitTests.cs @@ -5,7 +5,8 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Services; -using Umbraco.Tests.Common.TestHelpers.Entities; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Web.BackOffice.Controllers; using Umbraco.Web.Common.Exceptions; @@ -18,10 +19,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_Allowed_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(id: 9); var mediaMock = new Mock(); mediaMock.Setup(m => m.Path).Returns("-1,1234,5678"); var media = mediaMock.Object; @@ -42,9 +40,7 @@ namespace Umbraco.Tests.Web.Controllers public void Throws_Exception_When_No_Media_Found() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - var user = userMock.Object; + var user = CreateUser(id: 9); var mediaMock = new Mock(); mediaMock.Setup(m => m.Path).Returns("-1,1234,5678"); var media = mediaMock.Object; @@ -62,10 +58,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - userMock.Setup(u => u.StartMediaIds).Returns(new[] { 9876 }); - var user = userMock.Object; + var user = CreateUser(id: 9, startMediaId: 9876); var mediaMock = new Mock(); mediaMock.Setup(m => m.Path).Returns("-1,1234,5678"); var media = mediaMock.Object; @@ -88,10 +81,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Root_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(); var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); @@ -108,10 +98,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Root_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 }); - var user = userMock.Object; + var user = CreateUser(startMediaId: 1234); var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); @@ -130,10 +117,7 @@ namespace Umbraco.Tests.Web.Controllers public void Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List()) }); - var user = userMock.Object; + var user = CreateUser(); var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); @@ -150,10 +134,7 @@ namespace Umbraco.Tests.Web.Controllers public void No_Access_To_Recycle_Bin_By_Path() { //arrange - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(0); - userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 }); - var user = userMock.Object; + var user = CreateUser(startMediaId: 1234); var mediaServiceMock = new Mock(); var mediaService = mediaServiceMock.Object; var entityServiceMock = new Mock(); @@ -167,5 +148,18 @@ namespace Umbraco.Tests.Web.Controllers //assert Assert.IsFalse(result); } + + private IUser CreateUser(int id = 0, int? startMediaId = null) + { + return new UserBuilder() + .WithId(id) + .WithStartMediaIds(startMediaId.HasValue ? new[] { startMediaId.Value } : new int[0]) + .AddUserGroup() + .WithId(1) + .WithName("admin") + .WithAlias("admin") + .Done() + .Build(); + } } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Filters/FilterAllowedOutgoingContentAttributeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Filters/FilterAllowedOutgoingContentAttributeTests.cs index f6e551dc27..5c186c890c 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Filters/FilterAllowedOutgoingContentAttributeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Filters/FilterAllowedOutgoingContentAttributeTests.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using System.Net.Http.Headers; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; @@ -10,11 +9,11 @@ using Umbraco.Core.Models.Entities; using Umbraco.Core.Models.Membership; using Umbraco.Core.Security; using Umbraco.Core.Services; -using Umbraco.Tests.Common.TestHelpers.Entities; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Web.Actions; using Umbraco.Web.BackOffice.Filters; using Umbraco.Web.Models.ContentEditing; -using Umbraco.Web.Security; namespace Umbraco.Tests.Web.Controllers { @@ -78,10 +77,7 @@ namespace Umbraco.Tests.Web.Controllers [Test] public void Filter_On_Start_Node() { - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - userMock.Setup(u => u.StartContentIds).Returns(new[] { 5 }); - var user = userMock.Object; + var user = CreateUser(id: 9, startContentId: 5); var userServiceMock = new Mock(); var userService = userServiceMock.Object; var entityServiceMock = new Mock(); @@ -124,10 +120,7 @@ namespace Umbraco.Tests.Web.Controllers } var ids = list.Select(x => (int)x.Id).ToArray(); - var userMock = MockedUser.GetUserMock(); - userMock.Setup(u => u.Id).Returns(9); - userMock.Setup(u => u.StartContentIds).Returns(new int[0]); - var user = userMock.Object; + var user = CreateUser(id: 9, startContentId: 0); var userServiceMock = new Mock(); //we're only assigning 3 nodes browse permissions so that is what we expect as a result @@ -155,6 +148,14 @@ namespace Umbraco.Tests.Web.Controllers Assert.AreEqual(3, list.ElementAt(2).Id); } + private IUser CreateUser(int id = 0, int? startContentId = null) + { + return new UserBuilder() + .WithId(id) + .WithStartContentIds(startContentId.HasValue ? new[] { startContentId.Value } : new int[0]) + .Build(); + } + private class MyTestClass { public IEnumerable MyList { get; set; } diff --git a/src/Umbraco.Tests/Web/AngularIntegration/ContentModelSerializationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/ContentModelSerializationTests.cs similarity index 100% rename from src/Umbraco.Tests/Web/AngularIntegration/ContentModelSerializationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/ContentModelSerializationTests.cs diff --git a/src/Umbraco.Tests/Web/AngularIntegration/JsInitializationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/JsInitializationTests.cs similarity index 94% rename from src/Umbraco.Tests/Web/AngularIntegration/JsInitializationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/JsInitializationTests.cs index 90355429c4..f081d0f203 100644 --- a/src/Umbraco.Tests/Web/AngularIntegration/JsInitializationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/JsInitializationTests.cs @@ -1,5 +1,4 @@ -using System.Linq; -using NUnit.Framework; +using NUnit.Framework; using Umbraco.Core; using Umbraco.Web.WebAssets; diff --git a/src/Umbraco.Tests/Web/AngularIntegration/ServerVariablesParserTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/ServerVariablesParserTests.cs similarity index 99% rename from src/Umbraco.Tests/Web/AngularIntegration/ServerVariablesParserTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/ServerVariablesParserTests.cs index 74ec6e0034..b0eba4c382 100644 --- a/src/Umbraco.Tests/Web/AngularIntegration/ServerVariablesParserTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/ServerVariablesParserTests.cs @@ -8,8 +8,6 @@ namespace Umbraco.Tests.Web.AngularIntegration [TestFixture] public class ServerVariablesParserTests { - - [Test] public void Parse() { diff --git a/src/Umbraco.Tests/Macros/MacroParserTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs similarity index 99% rename from src/Umbraco.Tests/Macros/MacroParserTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs index 898ae4b20e..1d9e9012e0 100644 --- a/src/Umbraco.Tests/Macros/MacroParserTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using NUnit.Framework; -using Umbraco.Core.Macros; using Umbraco.Web.Macros; namespace Umbraco.Tests.Macros diff --git a/src/Umbraco.Tests/Services/FileServiceTests.cs b/src/Umbraco.Tests/Services/FileServiceTests.cs deleted file mode 100644 index fa27a3ee81..0000000000 --- a/src/Umbraco.Tests/Services/FileServiceTests.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using NUnit.Framework; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; - -namespace Umbraco.Tests.Services -{ - [TestFixture] - [Apartment(ApartmentState.STA)] - [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class FileServiceTests : TestWithSomeContentBase - { - [Test] - public void Create_Template_Then_Assign_Child() - { - var child = ServiceContext.FileService.CreateTemplateWithIdentity("Child", "child", "test"); - var parent = ServiceContext.FileService.CreateTemplateWithIdentity("Parent", "parent", "test"); - - child.SetMasterTemplate(parent); - ServiceContext.FileService.SaveTemplate(child); - - child = ServiceContext.FileService.GetTemplate(child.Id); - - Assert.AreEqual(parent.Alias, child.MasterTemplateAlias); - - } - - [Test] - public void Create_Template_With_Child_Then_Unassign() - { - var parent = ServiceContext.FileService.CreateTemplateWithIdentity("Parent", "parent", "test"); - var child = ServiceContext.FileService.CreateTemplateWithIdentity("Child", "child", "test", parent); - - child.SetMasterTemplate(null); - ServiceContext.FileService.SaveTemplate(child); - - child = ServiceContext.FileService.GetTemplate(child.Id); - - Assert.AreEqual(null, child.MasterTemplateAlias); - } - - [Test] - public void Can_Query_Template_Children() - { - var parent = ServiceContext.FileService.CreateTemplateWithIdentity("Parent", "parent", "test"); - var child1 = ServiceContext.FileService.CreateTemplateWithIdentity("Child1", "child1", "test", parent); - var child2 = ServiceContext.FileService.CreateTemplateWithIdentity("Child2", "child2", "test", parent); - - var children = ServiceContext.FileService.GetTemplates(parent.Id).Select(x => x.Id).ToArray(); - - Assert.IsTrue(children.Contains(child1.Id)); - Assert.IsTrue(children.Contains(child2.Id)); - } - - [Test] - public void Create_Template_With_Custom_Alias() - { - var template = ServiceContext.FileService.CreateTemplateWithIdentity("Test template", "customTemplateAlias", "test"); - - ServiceContext.FileService.SaveTemplate(template); - - template = ServiceContext.FileService.GetTemplate(template.Id); - - Assert.AreEqual("Test template", template.Name); - Assert.AreEqual("customTemplateAlias", template.Alias); - } - - } -} diff --git a/src/Umbraco.Tests/Services/PackagingServiceTests.cs b/src/Umbraco.Tests/Services/PackagingServiceTests.cs deleted file mode 100644 index f6878e9407..0000000000 --- a/src/Umbraco.Tests/Services/PackagingServiceTests.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.IO; -using NUnit.Framework; -using Umbraco.Core.IO; -using Umbraco.Core.Models.Packaging; -using Umbraco.Core.Services.Implement; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; - -namespace Umbraco.Tests.Services -{ - [TestFixture] - [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class PackagingServiceTests : TestWithSomeContentBase - { - - - - - - } -} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index cdbacc157c..e8b188bd63 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -152,7 +152,6 @@ - @@ -166,23 +165,17 @@ - - - - - - @@ -198,8 +191,6 @@ - - @@ -222,9 +213,6 @@ - - - @@ -241,7 +229,6 @@ - @@ -264,7 +251,6 @@ - @@ -277,15 +263,11 @@ - - - - @@ -345,8 +327,6 @@ - - True diff --git a/src/Umbraco.Web.Common/UmbracoContext/UmbracoContextFactory.cs b/src/Umbraco.Web.Common/UmbracoContext/UmbracoContextFactory.cs index a31ef614cf..f50a2e2ba8 100644 --- a/src/Umbraco.Web.Common/UmbracoContext/UmbracoContextFactory.cs +++ b/src/Umbraco.Web.Common/UmbracoContext/UmbracoContextFactory.cs @@ -96,7 +96,6 @@ namespace Umbraco.Web if (currentUmbracoContext != null) return new UmbracoContextReference(currentUmbracoContext, false, _umbracoContextAccessor); - var umbracoContext = CreateUmbracoContext(); _umbracoContextAccessor.UmbracoContext = umbracoContext;