From 0c5cf5256b8017c1cf70782024faffc6063c60fd Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 2 Oct 2018 12:57:19 +0200 Subject: [PATCH] manual merge pass #2 --- src/Umbraco.Core/StringExtensions.cs | 24 ++++++++++ .../Repositories/AuditRepositoryTest.cs | 34 +++++++------- .../Repositories/UserRepositoryTest.cs | 44 ++++++++++--------- .../Strings/StringExtensionsTests.cs | 10 +++++ .../Web/TemplateUtilitiesTests.cs | 2 + src/Umbraco.Web/Scheduling/ScheduledTasks.cs | 10 ++--- .../Trees/DataTypeTreeController.cs | 1 + 7 files changed, 84 insertions(+), 41 deletions(-) diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index aa7075f418..9c686c4353 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -1384,6 +1384,30 @@ namespace Umbraco.Core return idCheckList.Contains(value); } + /// + /// Converts a file name to a friendly name for a content item + /// + /// + /// + public static string ToFriendlyName(this string fileName) + { + // strip the file extension + fileName = fileName.StripFileExtension(); + + // underscores and dashes to spaces + fileName = fileName.ReplaceMany(new[] { '_', '-' }, ' '); + + // any other conversions ? + + // Pascalcase (to be done last) + fileName = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(fileName); + + // Replace multiple consecutive spaces with a single space + fileName = string.Join(" ", fileName.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); + + return fileName; + } + // From: http://stackoverflow.com/a/961504/5018 // filters control characters but allows only properly-formed surrogate sequences private static readonly Lazy InvalidXmlChars = new Lazy(() => diff --git a/src/Umbraco.Tests/Persistence/Repositories/AuditRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/AuditRepositoryTest.cs index 855c844949..f7945af7cb 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/AuditRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/AuditRepositoryTest.cs @@ -1,6 +1,7 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.Persistence.Querying; @@ -63,43 +64,46 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void Get_Paged_Items_By_User_Id_With_Query_And_Filter() { - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - using (var repo = new AuditRepository(unitOfWork, CacheHelper, Logger, SqlSyntax)) + var sp = TestObjects.GetScopeProvider(Logger); + using (var scope = sp.CreateScope()) { - for (int i = 0; i < 100; i++) + var repo = new AuditRepository((IScopeAccessor)sp, CacheHelper, Logger); + + for (var i = 0; i < 100; i++) { - repo.AddOrUpdate(new AuditItem(i, string.Format("Content {0} created", i), AuditType.New, 0)); - repo.AddOrUpdate(new AuditItem(i, string.Format("Content {0} published", i), AuditType.Publish, 0)); + repo.Save(new AuditItem(i, $"Content {i} created", AuditType.New, 0)); + repo.Save(new AuditItem(i, $"Content {i} published", AuditType.Publish, 0)); } - unitOfWork.Commit(); + + scope.Complete(); } - using (var repo = new AuditRepository(unitOfWork, CacheHelper, Logger, SqlSyntax)) + using (var scope = sp.CreateScope()) { - var query = Query.Builder.Where(x => x.UserId == 0); + var repo = new AuditRepository((IScopeAccessor)sp, CacheHelper, Logger); + + var query = sp.SqlContext.Query().Where(x => x.UserId == 0); try { - DatabaseContext.Database.EnableSqlTrace = true; - DatabaseContext.Database.EnableSqlCount(); + scope.Database.AsUmbracoDatabase().EnableSqlTrace = true; + scope.Database.AsUmbracoDatabase().EnableSqlCount = true; var page = repo.GetPagedResultsByQuery(query, 0, 10, out var total, Direction.Descending, new[] { AuditType.Publish }, - Query.Builder.Where(x => x.UserId > -1)); + sp.SqlContext.Query().Where(x => x.UserId > -1)); Assert.AreEqual(10, page.Count()); Assert.AreEqual(100, total); } finally { - DatabaseContext.Database.EnableSqlTrace = false; - DatabaseContext.Database.DisableSqlCount(); + scope.Database.AsUmbracoDatabase().EnableSqlTrace = false; + scope.Database.AsUmbracoDatabase().EnableSqlCount = false; } } } - [Test] public void Get_Paged_Items_With_AuditType_Filter() { diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs index 4fca3cb566..b545e66ad8 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs @@ -15,6 +15,7 @@ using Umbraco.Core.Scoping; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; +using Umbraco.Core.Persistence; namespace Umbraco.Tests.Persistence.Repositories { @@ -346,63 +347,64 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void Can_Get_Paged_Results_By_Query_And_Filter_And_Groups() { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepository(unitOfWork)) + var provider = TestObjects.GetScopeProvider(Logger); + using (var scope = provider.CreateScope()) { - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); - var query = Query.Builder.Where(x => x.Username == "TestUser1" || x.Username == "TestUser2"); + var repository = CreateRepository(provider); + + var users = CreateAndCommitMultipleUsers(repository); + var query = provider.SqlContext.Query().Where(x => x.Username == "TestUser1" || x.Username == "TestUser2"); try { - DatabaseContext.Database.EnableSqlTrace = true; - DatabaseContext.Database.EnableSqlCount(); + scope.Database.AsUmbracoDatabase().EnableSqlTrace = true; + scope.Database.AsUmbracoDatabase().EnableSqlCount = true; // Act var result = repository.GetPagedResultsByQuery(query, 0, 10, out var totalRecs, user => user.Id, Direction.Ascending, excludeUserGroups: new[] { Constants.Security.TranslatorGroupAlias }, - filter: Query.Builder.Where(x => x.Id > -1)); + filter: provider.SqlContext.Query().Where(x => x.Id > -1)); // Assert Assert.AreEqual(2, totalRecs); } finally { - DatabaseContext.Database.EnableSqlTrace = false; - DatabaseContext.Database.DisableSqlCount(); + scope.Database.AsUmbracoDatabase().EnableSqlTrace = false; + scope.Database.AsUmbracoDatabase().EnableSqlCount = false; } } + } [Test] public void Can_Get_Paged_Results_With_Filter_And_Groups() { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepository(unitOfWork)) + var provider = TestObjects.GetScopeProvider(Logger); + using (var scope = provider.CreateScope()) { - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); + var repository = CreateRepository(provider); + + var users = CreateAndCommitMultipleUsers(repository); try { - DatabaseContext.Database.EnableSqlTrace = true; - DatabaseContext.Database.EnableSqlCount(); + scope.Database.AsUmbracoDatabase().EnableSqlTrace = true; + scope.Database.AsUmbracoDatabase().EnableSqlCount = true; // Act var result = repository.GetPagedResultsByQuery(null, 0, 10, out var totalRecs, user => user.Id, Direction.Ascending, includeUserGroups: new[] { Constants.Security.AdminGroupAlias, Constants.Security.SensitiveDataGroupAlias }, excludeUserGroups: new[] { Constants.Security.TranslatorGroupAlias }, - filter: Query.Builder.Where(x => x.Id == 0)); + filter: provider.SqlContext.Query().Where(x => x.Id == 0)); // Assert Assert.AreEqual(1, totalRecs); } finally { - DatabaseContext.Database.EnableSqlTrace = false; - DatabaseContext.Database.DisableSqlCount(); + scope.Database.AsUmbracoDatabase().EnableSqlTrace = false; + scope.Database.AsUmbracoDatabase().EnableSqlCount = false; } } } diff --git a/src/Umbraco.Tests/Strings/StringExtensionsTests.cs b/src/Umbraco.Tests/Strings/StringExtensionsTests.cs index 08e91071cb..81dec809c8 100644 --- a/src/Umbraco.Tests/Strings/StringExtensionsTests.cs +++ b/src/Umbraco.Tests/Strings/StringExtensionsTests.cs @@ -3,9 +3,11 @@ using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Linq; +using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; @@ -30,6 +32,14 @@ namespace Umbraco.Tests.Strings Assert.IsInstanceOf(helper); } + [TestCase("hello-world.png", "Hello World")] + [TestCase("hello-world .png", "Hello World")] + [TestCase("_hello-world __1.png", "Hello World 1")] + public void To_Friendly_Name(string first, string second) + { + Assert.AreEqual(first.ToFriendlyName(), second); + } + [TestCase("hello", "world", false)] [TestCase("hello", "hello", true)] [TestCase("hellohellohellohellohellohellohello", "hellohellohellohellohellohellohelloo", false)] diff --git a/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs b/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs index 946e043bab..df21739c0b 100644 --- a/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs +++ b/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs @@ -20,6 +20,8 @@ using Umbraco.Web.PublishedCache; using Umbraco.Web.Routing; using Umbraco.Web.Security; using Umbraco.Web.Templates; +using System.Linq; +using Umbraco.Core.Services; namespace Umbraco.Tests.Web { diff --git a/src/Umbraco.Web/Scheduling/ScheduledTasks.cs b/src/Umbraco.Web/Scheduling/ScheduledTasks.cs index c9c3869f30..fdaa4dfd6d 100644 --- a/src/Umbraco.Web/Scheduling/ScheduledTasks.cs +++ b/src/Umbraco.Web/Scheduling/ScheduledTasks.cs @@ -67,11 +67,11 @@ namespace Umbraco.Web.Scheduling private async Task GetTaskByHttpAync(string url, CancellationToken token) { if (_httpClient == null) - _httpClient = new HttpClient(); - - if (Uri.TryCreate(_runtime.ApplicationUrl, UriKind.Absolute, out var baseUri)) - _httpClient.BaseAddress = baseUri; - + _httpClient = new HttpClient + { + BaseAddress = _runtime.ApplicationUrl + }; + var request = new HttpRequestMessage(HttpMethod.Get, url); //TODO: pass custom the authorization header, currently these aren't really secured! diff --git a/src/Umbraco.Web/Trees/DataTypeTreeController.cs b/src/Umbraco.Web/Trees/DataTypeTreeController.cs index d63a14af35..183889777b 100644 --- a/src/Umbraco.Web/Trees/DataTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/DataTypeTreeController.cs @@ -122,6 +122,7 @@ namespace Umbraco.Web.Trees }); if (container.HasChildren == false) + { //can delete data type menu.Items.Add(Services.TextService.Localize($"actions/{ActionDelete.Instance.Alias}")); }