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}"));
}