Merge remote-tracking branch 'origin/v10/dev' into v10/feature/nullable-reference-types-in-Umbraco-Core
# Conflicts: # src/Umbraco.Core/Configuration/Models/SecuritySettings.cs # src/Umbraco.Core/Events/DeleteEventArgs.cs # src/Umbraco.Core/Events/IEventDispatcher.cs # src/Umbraco.Core/Events/PassThroughEventDispatcher.cs # src/Umbraco.Core/Events/QueuingEventDispatcherBase.cs # src/Umbraco.Core/IO/MediaFileManager.cs # src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs # src/Umbraco.Core/PropertyEditors/DataValueEditor.cs # src/Umbraco.Core/Routing/DefaultUrlProvider.cs
This commit is contained in:
@@ -8,6 +8,7 @@ using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Cache;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Scoping;
|
||||
using Umbraco.Cms.Infrastructure.Scoping;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Cache
|
||||
{
|
||||
@@ -19,7 +20,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Cache
|
||||
get
|
||||
{
|
||||
var accessor = new Mock<IScopeAccessor>();
|
||||
var scope = new Mock<IScope>();
|
||||
var scope = new Mock<IDatabaseScope>();
|
||||
scope.Setup(x => x.RepositoryCacheMode).Returns(RepositoryCacheMode.Default);
|
||||
accessor.Setup(x => x.AmbientScope).Returns(scope.Object);
|
||||
return accessor.Object;
|
||||
|
||||
@@ -11,6 +11,7 @@ using Umbraco.Cms.Core.Cache;
|
||||
using Umbraco.Cms.Core.Collections;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Scoping;
|
||||
using Umbraco.Cms.Infrastructure.Scoping;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Cache
|
||||
{
|
||||
@@ -22,7 +23,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Cache
|
||||
get
|
||||
{
|
||||
var accessor = new Mock<IScopeAccessor>();
|
||||
var scope = new Mock<IScope>();
|
||||
var scope = new Mock<IDatabaseScope>();
|
||||
scope.Setup(x => x.RepositoryCacheMode).Returns(RepositoryCacheMode.Default);
|
||||
accessor.Setup(x => x.AmbientScope).Returns(scope.Object);
|
||||
return accessor.Object;
|
||||
|
||||
@@ -8,6 +8,7 @@ using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Cache;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Scoping;
|
||||
using Umbraco.Cms.Infrastructure.Scoping;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Cache
|
||||
{
|
||||
@@ -19,7 +20,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Cache
|
||||
get
|
||||
{
|
||||
var accessor = new Mock<IScopeAccessor>();
|
||||
var scope = new Mock<IScope>();
|
||||
var scope = new Mock<IDatabaseScope>();
|
||||
scope.Setup(x => x.RepositoryCacheMode).Returns(RepositoryCacheMode.Default);
|
||||
accessor.Setup(x => x.AmbientScope).Returns(scope.Object);
|
||||
return accessor.Object;
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Components
|
||||
{
|
||||
// FIXME: use IUmbracoDatabaseFactory vs UmbracoDatabaseFactory, clean it all up!
|
||||
var mock = new Mock<IServiceProvider>();
|
||||
NullLoggerFactory loggerFactory = NullLoggerFactory.Instance;
|
||||
ILoggerFactory loggerFactory = NullLoggerFactory.Instance;
|
||||
ILogger logger = loggerFactory.CreateLogger("GenericLogger");
|
||||
var globalSettings = new GlobalSettings();
|
||||
var connectionStrings = new ConnectionStrings();
|
||||
@@ -69,7 +69,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Components
|
||||
Mock.Of<IServiceProvider>(),
|
||||
Options.Create(new ContentSettings()));
|
||||
IEventAggregator eventAggregator = Mock.Of<IEventAggregator>();
|
||||
var scopeProvider = new ScopeProvider(f, fs, new TestOptionsMonitor<CoreDebugSettings>(coreDebug), mediaFileManager, loggerFactory.CreateLogger<ScopeProvider>(), loggerFactory, NoAppCache.Instance, eventAggregator);
|
||||
var scopeProvider = new ScopeProvider(f, fs, new TestOptionsMonitor<CoreDebugSettings>(coreDebug), loggerFactory, NoAppCache.Instance, eventAggregator);
|
||||
|
||||
mock.Setup(x => x.GetService(typeof(ILogger))).Returns(logger);
|
||||
mock.Setup(x => x.GetService(typeof(ILogger<ComponentCollection>))).Returns(loggerFactory.CreateLogger<ComponentCollection>);
|
||||
|
||||
@@ -6,9 +6,9 @@ using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data.Odbc;
|
||||
using System.Data.OleDb;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Composing;
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Configuration.Models
|
||||
{
|
||||
[TestFixture]
|
||||
public class RequestHandlerSettingsTests
|
||||
{
|
||||
[Test]
|
||||
public void Given_CharCollection_With_DefaultEnabled_MergesCollection()
|
||||
{
|
||||
var userCollection = new CharItem[]
|
||||
{
|
||||
new () { Char = "test", Replacement = "replace" },
|
||||
new () { Char = "test2", Replacement = "replace2" }
|
||||
};
|
||||
|
||||
|
||||
var settings = new RequestHandlerSettings { UserDefinedCharCollection = userCollection };
|
||||
var actual = settings.GetCharReplacements().ToList();
|
||||
|
||||
var expectedCollection = RequestHandlerSettings.DefaultCharCollection.ToList();
|
||||
expectedCollection.AddRange(userCollection);
|
||||
|
||||
Assert.AreEqual(expectedCollection.Count, actual.Count);
|
||||
Assert.That(actual, Is.EquivalentTo(expectedCollection));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Given_CharCollection_With_DefaultDisabled_ReturnsUserCollection()
|
||||
{
|
||||
var userCollection = new CharItem[]
|
||||
{
|
||||
new () { Char = "test", Replacement = "replace" },
|
||||
new () { Char = "test2", Replacement = "replace2" }
|
||||
};
|
||||
|
||||
var settings = new RequestHandlerSettings { UserDefinedCharCollection = userCollection, EnableDefaultCharReplacements = false };
|
||||
var actual = settings.GetCharReplacements().ToList();
|
||||
|
||||
Assert.AreEqual(userCollection.Length, actual.Count);
|
||||
Assert.That(actual, Is.EquivalentTo(userCollection));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Given_CharCollection_That_OverridesDefaultValues_ReturnsReplacements()
|
||||
{
|
||||
var userCollection = new CharItem[]
|
||||
{
|
||||
new () { Char = "%", Replacement = "percent" },
|
||||
new () { Char = ".", Replacement = "dot" }
|
||||
};
|
||||
|
||||
var settings = new RequestHandlerSettings { UserDefinedCharCollection = userCollection };
|
||||
var actual = settings.GetCharReplacements().ToList();
|
||||
|
||||
Assert.AreEqual(RequestHandlerSettings.DefaultCharCollection.Length, actual.Count);
|
||||
|
||||
Assert.That(actual, Has.Exactly(1).Matches<CharItem>(x => x.Char == "%" && x.Replacement == "percent"));
|
||||
Assert.That(actual, Has.Exactly(1).Matches<CharItem>(x => x.Char == "." && x.Replacement == "dot"));
|
||||
Assert.That(actual, Has.Exactly(0).Matches<CharItem>(x => x.Char == "%" && x.Replacement == string.Empty));
|
||||
Assert.That(actual, Has.Exactly(0).Matches<CharItem>(x => x.Char == "." && x.Replacement == string.Empty));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Given_CharCollection_That_OverridesDefaultValues_And_ContainsNew_ReturnsMergedWithReplacements()
|
||||
{
|
||||
var userCollection = new CharItem[]
|
||||
{
|
||||
new () { Char = "%", Replacement = "percent" },
|
||||
new () { Char = ".", Replacement = "dot" },
|
||||
new () { Char = "new", Replacement = "new" }
|
||||
};
|
||||
|
||||
var settings = new RequestHandlerSettings { UserDefinedCharCollection = userCollection };
|
||||
var actual = settings.GetCharReplacements().ToList();
|
||||
|
||||
// Add 1 to the length, because we're expecting to only add one new one
|
||||
Assert.AreEqual(RequestHandlerSettings.DefaultCharCollection.Length + 1, actual.Count);
|
||||
|
||||
Assert.That(actual, Has.Exactly(1).Matches<CharItem>(x => x.Char == "%" && x.Replacement == "percent"));
|
||||
Assert.That(actual, Has.Exactly(1).Matches<CharItem>(x => x.Char == "." && x.Replacement == "dot"));
|
||||
Assert.That(actual, Has.Exactly(1).Matches<CharItem>(x => x.Char == "new" && x.Replacement == "new"));
|
||||
Assert.That(actual, Has.Exactly(0).Matches<CharItem>(x => x.Char == "%" && x.Replacement == string.Empty));
|
||||
Assert.That(actual, Has.Exactly(0).Matches<CharItem>(x => x.Char == "." && x.Replacement == string.Empty));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
private readonly JsonSerializerSettings _serializerSettings = new JsonSerializerSettings
|
||||
{
|
||||
Formatting = Formatting.None,
|
||||
NullValueHandling = NullValueHandling.Ignore,
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
};
|
||||
|
||||
private const string ContentGuid1 = "036ce82586a64dfba2d523a99ed80f58";
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
|
||||
@@ -11,6 +12,11 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
[TestFixture]
|
||||
public class NestedContentPropertyComponentTests
|
||||
{
|
||||
private static void AreEqualJson(string expected, string actual)
|
||||
{
|
||||
Assert.AreEqual(JToken.Parse(expected), JToken.Parse(actual));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Invalid_Json()
|
||||
{
|
||||
@@ -27,17 +33,17 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
Guid GuidFactory() => guids[guidCounter++];
|
||||
|
||||
var json = @"[
|
||||
{""key"":""04a6dba8-813c-4144-8aca-86a3f24ebf08"",""name"":""Item 1"",""ncContentTypeAlias"":""nested"",""text"":""woot""},
|
||||
{""key"":""d8e214d8-c5a5-4b45-9b51-4050dd47f5fa"",""name"":""Item 2"",""ncContentTypeAlias"":""nested"",""text"":""zoot""}
|
||||
]";
|
||||
{""key"":""04a6dba8-813c-4144-8aca-86a3f24ebf08"",""name"":""Item 1"",""ncContentTypeAlias"":""nested"",""text"":""woot""},
|
||||
{""key"":""d8e214d8-c5a5-4b45-9b51-4050dd47f5fa"",""name"":""Item 2"",""ncContentTypeAlias"":""nested"",""text"":""zoot""}
|
||||
]";
|
||||
var expected = json
|
||||
.Replace("04a6dba8-813c-4144-8aca-86a3f24ebf08", guids[0].ToString())
|
||||
.Replace("d8e214d8-c5a5-4b45-9b51-4050dd47f5fa", guids[1].ToString());
|
||||
|
||||
var component = new NestedContentPropertyHandler();
|
||||
var result = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
var actual = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
|
||||
Assert.AreEqual(JsonConvert.DeserializeObject(expected).ToString(), JsonConvert.DeserializeObject(result).ToString());
|
||||
AreEqualJson(expected, actual);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -48,29 +54,27 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
Guid GuidFactory() => guids[guidCounter++];
|
||||
|
||||
var json = @"[{
|
||||
""key"": ""04a6dba8-813c-4144-8aca-86a3f24ebf08"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""woot""
|
||||
}, {
|
||||
""key"": ""d8e214d8-c5a5-4b45-9b51-4050dd47f5fa"",
|
||||
""name"": ""Item 2"",
|
||||
""ncContentTypeAlias"": ""list"",
|
||||
""text"": ""zoot"",
|
||||
""subItems"": [{
|
||||
""key"": ""dccf550c-3a05-469e-95e1-a8f560f788c2"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""woot""
|
||||
}, {
|
||||
""key"": ""fbde4288-8382-4e13-8933-ed9c160de050"",
|
||||
""name"": ""Item 2"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""zoot""
|
||||
}
|
||||
]
|
||||
}
|
||||
]";
|
||||
""key"": ""04a6dba8-813c-4144-8aca-86a3f24ebf08"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""woot""
|
||||
}, {
|
||||
""key"": ""d8e214d8-c5a5-4b45-9b51-4050dd47f5fa"",
|
||||
""name"": ""Item 2"",
|
||||
""ncContentTypeAlias"": ""list"",
|
||||
""text"": ""zoot"",
|
||||
""subItems"": [{
|
||||
""key"": ""dccf550c-3a05-469e-95e1-a8f560f788c2"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""woot""
|
||||
}, {
|
||||
""key"": ""fbde4288-8382-4e13-8933-ed9c160de050"",
|
||||
""name"": ""Item 2"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""zoot""
|
||||
}]
|
||||
}]";
|
||||
|
||||
var expected = json
|
||||
.Replace("04a6dba8-813c-4144-8aca-86a3f24ebf08", guids[0].ToString())
|
||||
@@ -79,9 +83,9 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
.Replace("fbde4288-8382-4e13-8933-ed9c160de050", guids[3].ToString());
|
||||
|
||||
var component = new NestedContentPropertyHandler();
|
||||
var result = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
var actual = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
|
||||
Assert.AreEqual(JsonConvert.DeserializeObject(expected).ToString(), JsonConvert.DeserializeObject(result).ToString());
|
||||
AreEqualJson(expected, actual);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -93,7 +97,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
|
||||
// we need to ensure the escaped json is consistent with how it will be re-escaped after parsing
|
||||
// and this is how to do that, the result will also include quotes around it.
|
||||
var subJsonEscaped = JsonConvert.ToString(JsonConvert.DeserializeObject(@"[{
|
||||
var subJsonEscaped = JsonConvert.ToString(JToken.Parse(@"
|
||||
[{
|
||||
""key"": ""dccf550c-3a05-469e-95e1-a8f560f788c2"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
@@ -104,21 +109,21 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""zoot""
|
||||
}
|
||||
]").ToString());
|
||||
]").ToString(Formatting.None));
|
||||
|
||||
var json = @"[{
|
||||
""key"": ""04a6dba8-813c-4144-8aca-86a3f24ebf08"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""woot""
|
||||
}, {
|
||||
""key"": ""d8e214d8-c5a5-4b45-9b51-4050dd47f5fa"",
|
||||
""name"": ""Item 2"",
|
||||
""ncContentTypeAlias"": ""list"",
|
||||
""text"": ""zoot"",
|
||||
""subItems"":" + subJsonEscaped + @"
|
||||
}
|
||||
]";
|
||||
""key"": ""04a6dba8-813c-4144-8aca-86a3f24ebf08"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""woot""
|
||||
}, {
|
||||
""key"": ""d8e214d8-c5a5-4b45-9b51-4050dd47f5fa"",
|
||||
""name"": ""Item 2"",
|
||||
""ncContentTypeAlias"": ""list"",
|
||||
""text"": ""zoot"",
|
||||
""subItems"":" + subJsonEscaped + @"
|
||||
}
|
||||
]";
|
||||
|
||||
var expected = json
|
||||
.Replace("04a6dba8-813c-4144-8aca-86a3f24ebf08", guids[0].ToString())
|
||||
@@ -127,9 +132,9 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
.Replace("fbde4288-8382-4e13-8933-ed9c160de050", guids[3].ToString());
|
||||
|
||||
var component = new NestedContentPropertyHandler();
|
||||
var result = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
var actual = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
|
||||
Assert.AreEqual(JsonConvert.DeserializeObject(expected).ToString(), JsonConvert.DeserializeObject(result).ToString());
|
||||
AreEqualJson(expected, actual);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -141,7 +146,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
|
||||
// we need to ensure the escaped json is consistent with how it will be re-escaped after parsing
|
||||
// and this is how to do that, the result will also include quotes around it.
|
||||
var subJsonEscaped = JsonConvert.ToString(JsonConvert.DeserializeObject(@"[{
|
||||
var subJsonEscaped = JsonConvert.ToString(JToken.Parse(@"[{
|
||||
""key"": ""dccf550c-3a05-469e-95e1-a8f560f788c2"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
@@ -152,7 +157,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""zoot""
|
||||
}
|
||||
]").ToString());
|
||||
]").ToString(Formatting.None));
|
||||
|
||||
// Complex editor such as the grid
|
||||
var complexEditorJsonEscaped = @"{
|
||||
@@ -231,9 +236,9 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
.Replace("fbde4288-8382-4e13-8933-ed9c160de050", guids[3].ToString());
|
||||
|
||||
var component = new NestedContentPropertyHandler();
|
||||
var result = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
var actual = component.CreateNestedContentKeys(json, false, GuidFactory);
|
||||
|
||||
Assert.AreEqual(JsonConvert.DeserializeObject(expected).ToString(), JsonConvert.DeserializeObject(result).ToString());
|
||||
AreEqualJson(expected, actual);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -252,10 +257,10 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
var result = component.CreateNestedContentKeys(json, true, GuidFactory);
|
||||
|
||||
// Ensure the new GUID is put in a key into the JSON
|
||||
Assert.IsTrue(JsonConvert.DeserializeObject(result).ToString().Contains(guids[0].ToString()));
|
||||
Assert.IsTrue(result.Contains(guids[0].ToString()));
|
||||
|
||||
// Ensure that the original key is NOT changed/modified & still exists
|
||||
Assert.IsTrue(JsonConvert.DeserializeObject(result).ToString().Contains("04a6dba8-813c-4144-8aca-86a3f24ebf08"));
|
||||
Assert.IsTrue(result.Contains("04a6dba8-813c-4144-8aca-86a3f24ebf08"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -267,7 +272,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
|
||||
// we need to ensure the escaped json is consistent with how it will be re-escaped after parsing
|
||||
// and this is how to do that, the result will also include quotes around it.
|
||||
var subJsonEscaped = JsonConvert.ToString(JsonConvert.DeserializeObject(@"[{
|
||||
var subJsonEscaped = JsonConvert.ToString(JToken.Parse(@"[{
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""woot""
|
||||
@@ -276,7 +281,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""zoot""
|
||||
}
|
||||
]").ToString());
|
||||
]").ToString(Formatting.None));
|
||||
|
||||
var json = @"[{
|
||||
""name"": ""Item 1 was copied and has no key"",
|
||||
@@ -295,9 +300,9 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
var result = component.CreateNestedContentKeys(json, true, GuidFactory);
|
||||
|
||||
// Ensure the new GUID is put in a key into the JSON for each item
|
||||
Assert.IsTrue(JsonConvert.DeserializeObject(result).ToString().Contains(guids[0].ToString()));
|
||||
Assert.IsTrue(JsonConvert.DeserializeObject(result).ToString().Contains(guids[1].ToString()));
|
||||
Assert.IsTrue(JsonConvert.DeserializeObject(result).ToString().Contains(guids[2].ToString()));
|
||||
Assert.IsTrue(result.Contains(guids[0].ToString()));
|
||||
Assert.IsTrue(result.Contains(guids[1].ToString()));
|
||||
Assert.IsTrue(result.Contains(guids[2].ToString()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -309,7 +314,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
|
||||
// we need to ensure the escaped json is consistent with how it will be re-escaped after parsing
|
||||
// and this is how to do that, the result will also include quotes around it.
|
||||
var subJsonEscaped = JsonConvert.ToString(JsonConvert.DeserializeObject(@"[{
|
||||
var subJsonEscaped = JsonConvert.ToString(JToken.Parse(@"[{
|
||||
""key"": ""dccf550c-3a05-469e-95e1-a8f560f788c2"",
|
||||
""name"": ""Item 1"",
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
@@ -319,7 +324,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
""ncContentTypeAlias"": ""text"",
|
||||
""text"": ""zoot""
|
||||
}
|
||||
]").ToString());
|
||||
]").ToString(Formatting.None));
|
||||
|
||||
// Complex editor such as the grid
|
||||
var complexEditorJsonEscaped = @"{
|
||||
@@ -394,8 +399,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors
|
||||
var result = component.CreateNestedContentKeys(json, true, GuidFactory);
|
||||
|
||||
// Ensure the new GUID is put in a key into the JSON for each item
|
||||
Assert.IsTrue(JsonConvert.DeserializeObject(result).ToString().Contains(guids[0].ToString()));
|
||||
Assert.IsTrue(JsonConvert.DeserializeObject(result).ToString().Contains(guids[1].ToString()));
|
||||
Assert.IsTrue(result.Contains(guids[0].ToString()));
|
||||
Assert.IsTrue(result.Contains(guids[1].ToString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,452 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Cache;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.Events;
|
||||
using Umbraco.Cms.Core.Hosting;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.Scoping;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Strings;
|
||||
using Umbraco.Cms.Infrastructure.Persistence;
|
||||
using Umbraco.Cms.Tests.Common;
|
||||
using Umbraco.Cms.Tests.Common.Builders;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Scoping
|
||||
{
|
||||
[TestFixture]
|
||||
public class ScopeEventDispatcherTests
|
||||
{
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
// remove all handlers first
|
||||
DoThing1 = null;
|
||||
DoThing2 = null;
|
||||
DoThing3 = null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
[TestCase(false, true, true)]
|
||||
[TestCase(false, true, false)]
|
||||
[TestCase(false, false, true)]
|
||||
[TestCase(false, false, false)]
|
||||
[TestCase(true, true, true)]
|
||||
[TestCase(true, true, false)]
|
||||
[TestCase(true, false, true)]
|
||||
[TestCase(true, false, false)]
|
||||
public void EventsHandling(bool passive, bool cancel, bool complete)
|
||||
{
|
||||
var counter1 = 0;
|
||||
var counter2 = 0;
|
||||
|
||||
DoThing1 += (sender, args) => { counter1++; if (cancel) args.Cancel = true; };
|
||||
DoThing2 += (sender, args) => { counter2++; };
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: passive ? new PassiveEventDispatcher() : null))
|
||||
{
|
||||
var cancelled = scope.Events.DispatchCancelable(DoThing1, this, new SaveEventArgs<string>("test"));
|
||||
if (cancelled == false)
|
||||
scope.Events.Dispatch(DoThing2, this, new SaveEventArgs<int>(0));
|
||||
if (complete)
|
||||
scope.Complete();
|
||||
}
|
||||
|
||||
var expected1 = passive ? 0 : 1;
|
||||
Assert.AreEqual(expected1, counter1);
|
||||
|
||||
int expected2;
|
||||
if (passive)
|
||||
expected2 = 0;
|
||||
else
|
||||
expected2 = cancel ? 0 : (complete ? 1 : 0);
|
||||
|
||||
Assert.AreEqual(expected2, counter2);
|
||||
}
|
||||
|
||||
private ScopeProvider GetScopeProvider(NullLoggerFactory instance)
|
||||
{
|
||||
var fileSystems = new FileSystems(
|
||||
instance,
|
||||
Mock.Of<IIOHelper>(),
|
||||
Options.Create(new GlobalSettings()),
|
||||
Mock.Of<IHostingEnvironment>());
|
||||
|
||||
var mediaFileManager = new MediaFileManager(
|
||||
Mock.Of<IFileSystem>(),
|
||||
Mock.Of<IMediaPathScheme>(),
|
||||
instance.CreateLogger<MediaFileManager>(),
|
||||
Mock.Of<IShortStringHelper>(),
|
||||
Mock.Of<IServiceProvider>(),
|
||||
Options.Create(new ContentSettings()));
|
||||
|
||||
return new ScopeProvider(
|
||||
Mock.Of<IUmbracoDatabaseFactory>(),
|
||||
fileSystems,
|
||||
new TestOptionsMonitor<CoreDebugSettings>(new CoreDebugSettings()),
|
||||
mediaFileManager,
|
||||
Mock.Of<ILogger<ScopeProvider>>(),
|
||||
instance,
|
||||
Mock.Of<IRequestCache>(),
|
||||
Mock.Of<IEventAggregator>()
|
||||
);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void QueueEvents()
|
||||
{
|
||||
DoThing1 += OnDoThingFail;
|
||||
DoThing2 += OnDoThingFail;
|
||||
DoThing3 += OnDoThingFail;
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoThing1, this, new SaveEventArgs<string>("test"));
|
||||
scope.Events.Dispatch(DoThing2, this, new SaveEventArgs<int>(0));
|
||||
scope.Events.Dispatch(DoThing3, this, new SaveEventArgs<decimal>(0));
|
||||
|
||||
// events have been queued
|
||||
Assert.AreEqual(3, scope.Events.GetEvents(EventDefinitionFilter.All).Count());
|
||||
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.All).ToArray();
|
||||
|
||||
var knownNames = new[] { "DoThing1", "DoThing2", "DoThing3" };
|
||||
var knownArgTypes = new[] { typeof(SaveEventArgs<string>), typeof(SaveEventArgs<int>), typeof(SaveEventArgs<decimal>) };
|
||||
|
||||
for (var i = 0; i < events.Length; i++)
|
||||
{
|
||||
Assert.AreEqual(knownNames[i], events[i].EventName);
|
||||
Assert.AreEqual(knownArgTypes[i], events[i].Args.GetType());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SupersededEvents()
|
||||
{
|
||||
DoSaveForContent += OnDoThingFail;
|
||||
DoDeleteForContent += OnDoThingFail;
|
||||
DoForTestArgs += OnDoThingFail;
|
||||
DoForTestArgs2 += OnDoThingFail;
|
||||
|
||||
var contentType = ContentTypeBuilder.CreateBasicContentType();
|
||||
|
||||
var content1 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content1.Id = 123;
|
||||
|
||||
var content2 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content2.Id = 456;
|
||||
|
||||
var content3 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content3.Id = 789;
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
|
||||
//content1 will be filtered from the args
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(new[] { content1, content3 }));
|
||||
scope.Events.Dispatch(DoDeleteForContent, this, new DeleteEventArgs<IContent>(content1), "DoDeleteForContent");
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content2));
|
||||
//this entire event will be filtered
|
||||
scope.Events.Dispatch(DoForTestArgs, this, new TestEventArgs(content1));
|
||||
scope.Events.Dispatch(DoForTestArgs2, this, new TestEventArgs2(content1));
|
||||
|
||||
// events have been queued
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.All).ToArray();
|
||||
Assert.AreEqual(4, events.Length);
|
||||
|
||||
Assert.AreEqual(typeof(SaveEventArgs<IContent>), events[0].Args.GetType());
|
||||
Assert.AreEqual(1, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.Count());
|
||||
Assert.AreEqual(content3.Id, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First().Id);
|
||||
|
||||
Assert.AreEqual(typeof(DeleteEventArgs<IContent>), events[1].Args.GetType());
|
||||
Assert.AreEqual(content1.Id, ((DeleteEventArgs<IContent>)events[1].Args).DeletedEntities.First().Id);
|
||||
|
||||
Assert.AreEqual(typeof(SaveEventArgs<IContent>), events[2].Args.GetType());
|
||||
Assert.AreEqual(content2.Id, ((SaveEventArgs<IContent>)events[2].Args).SavedEntities.First().Id);
|
||||
|
||||
Assert.AreEqual(typeof(TestEventArgs2), events[3].Args.GetType());
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SupersededEvents2()
|
||||
{
|
||||
Test_Unpublished += OnDoThingFail;
|
||||
Test_Deleted += OnDoThingFail;
|
||||
|
||||
var contentService = Mock.Of<IContentService>();
|
||||
var content = Mock.Of<IContent>();
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(Test_Unpublished, contentService, new PublishEventArgs<IContent>(new[] { content }), "Unpublished");
|
||||
scope.Events.Dispatch(Test_Deleted, contentService, new DeleteEventArgs<IContent>(new[] { content }), "Deleted");
|
||||
|
||||
// see U4-10764
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.All).ToArray();
|
||||
Assert.AreEqual(2, events.Length);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This will test that when we track events that before we Get the events we normalize all of the
|
||||
/// event entities to be the latest one (most current) found amongst the event so that there is
|
||||
/// no 'stale' entities in any of the args
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void LatestEntities()
|
||||
{
|
||||
DoSaveForContent += OnDoThingFail;
|
||||
|
||||
var now = DateTime.Now;
|
||||
var contentType = ContentTypeBuilder.CreateBasicContentType();
|
||||
var content1 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content1.Id = 123;
|
||||
content1.UpdateDate = now.AddMinutes(1);
|
||||
var content2 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content2.Id = 123;
|
||||
content2.UpdateDate = now.AddMinutes(2);
|
||||
var content3 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content3.Id = 123;
|
||||
content3.UpdateDate = now.AddMinutes(3);
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content1));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content2));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content3));
|
||||
|
||||
// events have been queued
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.All).ToArray();
|
||||
Assert.AreEqual(3, events.Length);
|
||||
|
||||
foreach (var t in events)
|
||||
{
|
||||
var args = (SaveEventArgs<IContent>)t.Args;
|
||||
foreach (var entity in args.SavedEntities)
|
||||
{
|
||||
Assert.AreEqual(content3, entity);
|
||||
Assert.IsTrue(object.ReferenceEquals(content3, entity));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FirstIn()
|
||||
{
|
||||
DoSaveForContent += OnDoThingFail;
|
||||
|
||||
var now = DateTime.Now;
|
||||
var contentType = ContentTypeBuilder.CreateBasicContentType();
|
||||
var content1 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content1.Id = 123;
|
||||
content1.UpdateDate = now.AddMinutes(1);
|
||||
var content2 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content2.Id = 123;
|
||||
content1.UpdateDate = now.AddMinutes(2);
|
||||
var content3 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content3.Id = 123;
|
||||
content1.UpdateDate = now.AddMinutes(3);
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content1));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content2));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content3));
|
||||
|
||||
// events have been queued
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.FirstIn).ToArray();
|
||||
Assert.AreEqual(1, events.Length);
|
||||
Assert.AreEqual(content1, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First());
|
||||
Assert.IsTrue(object.ReferenceEquals(content1, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First()));
|
||||
Assert.AreEqual(content1.UpdateDate, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First().UpdateDate);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LastIn()
|
||||
{
|
||||
DoSaveForContent += OnDoThingFail;
|
||||
|
||||
var now = DateTime.Now;
|
||||
var contentType = ContentTypeBuilder.CreateBasicContentType();
|
||||
var content1 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content1.Id = 123;
|
||||
content1.UpdateDate = now.AddMinutes(1);
|
||||
var content2 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content2.Id = 123;
|
||||
content2.UpdateDate = now.AddMinutes(2);
|
||||
var content3 = ContentBuilder.CreateBasicContent(contentType);
|
||||
content3.Id = 123;
|
||||
content3.UpdateDate = now.AddMinutes(3);
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content1));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content2));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content3));
|
||||
|
||||
// events have been queued
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.LastIn).ToArray();
|
||||
Assert.AreEqual(1, events.Length);
|
||||
Assert.AreEqual(content3, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First());
|
||||
Assert.IsTrue(object.ReferenceEquals(content3, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First()));
|
||||
Assert.AreEqual(content3.UpdateDate, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First().UpdateDate);
|
||||
}
|
||||
}
|
||||
|
||||
[TestCase(true)]
|
||||
[TestCase(false)]
|
||||
public void EventsDispatching_Passive(bool complete)
|
||||
{
|
||||
DoThing1 += OnDoThingFail;
|
||||
DoThing2 += OnDoThingFail;
|
||||
DoThing3 += OnDoThingFail;
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance);
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoThing1, this, new SaveEventArgs<string>("test"));
|
||||
scope.Events.Dispatch(DoThing2, this, new SaveEventArgs<int>(0));
|
||||
scope.Events.Dispatch(DoThing3, this, new SaveEventArgs<decimal>(0));
|
||||
|
||||
// events have been queued
|
||||
Assert.AreEqual(3, scope.Events.GetEvents(EventDefinitionFilter.All).Count());
|
||||
|
||||
if (complete)
|
||||
scope.Complete();
|
||||
}
|
||||
|
||||
// no event has been raised (else OnDoThingFail would have failed)
|
||||
}
|
||||
|
||||
[TestCase(true)]
|
||||
[TestCase(false)]
|
||||
public void EventsDispatching_Scope(bool complete)
|
||||
{
|
||||
var counter = 0;
|
||||
IScope ambientScope = null;
|
||||
IScopeContext ambientContext = null;
|
||||
Guid value = Guid.Empty;
|
||||
|
||||
var scopeProvider = GetScopeProvider(NullLoggerFactory.Instance) as ScopeProvider;
|
||||
|
||||
DoThing1 += (sender, args) => { counter++; };
|
||||
DoThing2 += (sender, args) => { counter++; };
|
||||
DoThing3 += (sender, args) =>
|
||||
{
|
||||
ambientScope = scopeProvider.AmbientScope;
|
||||
ambientContext = scopeProvider.AmbientContext;
|
||||
value = scopeProvider.Context.Enlist("value", Guid.NewGuid, (c, o) => { });
|
||||
counter++;
|
||||
};
|
||||
|
||||
Guid guid;
|
||||
using (var scope = scopeProvider.CreateScope())
|
||||
{
|
||||
Assert.IsNotNull(scopeProvider.AmbientContext);
|
||||
guid = scopeProvider.Context.Enlist("value", Guid.NewGuid, (c, o) => { });
|
||||
|
||||
scope.Events.Dispatch(DoThing1, this, new SaveEventArgs<string>("test"));
|
||||
scope.Events.Dispatch(DoThing2, this, new SaveEventArgs<int>(0));
|
||||
scope.Events.Dispatch(DoThing3, this, new SaveEventArgs<decimal>(0));
|
||||
|
||||
// events have been queued
|
||||
Assert.AreEqual(3, scope.Events.GetEvents(EventDefinitionFilter.All).Count());
|
||||
Assert.AreEqual(0, counter);
|
||||
|
||||
if (complete)
|
||||
scope.Complete();
|
||||
}
|
||||
|
||||
if (complete)
|
||||
{
|
||||
// events have been raised
|
||||
Assert.AreEqual(3, counter);
|
||||
Assert.IsNull(ambientScope); // scope was gone
|
||||
Assert.IsNotNull(ambientContext); // but not context
|
||||
Assert.AreEqual(guid, value); // so we got the same value!
|
||||
}
|
||||
else
|
||||
{
|
||||
// else, no event has been raised
|
||||
Assert.AreEqual(0, counter);
|
||||
}
|
||||
|
||||
// everything's gone
|
||||
Assert.IsNull(scopeProvider.AmbientScope);
|
||||
Assert.IsNull(scopeProvider.AmbientContext);
|
||||
}
|
||||
|
||||
private static void OnDoThingFail(object sender, EventArgs eventArgs)
|
||||
{
|
||||
Assert.Fail();
|
||||
}
|
||||
|
||||
public static event EventHandler<SaveEventArgs<IContent>> DoSaveForContent;
|
||||
public static event EventHandler<DeleteEventArgs<IContent>> DoDeleteForContent;
|
||||
public static event EventHandler<TestEventArgs> DoForTestArgs;
|
||||
public static event EventHandler<TestEventArgs2> DoForTestArgs2;
|
||||
public static event EventHandler<SaveEventArgs<string>> DoThing1;
|
||||
public static event EventHandler<SaveEventArgs<int>> DoThing2;
|
||||
|
||||
public static event TypedEventHandler<ScopeEventDispatcherTests, SaveEventArgs<decimal>> DoThing3;
|
||||
|
||||
public static event TypedEventHandler<IContentService, PublishEventArgs<IContent>> Test_Unpublished;
|
||||
public static event TypedEventHandler<IContentService, DeleteEventArgs<IContent>> Test_Deleted;
|
||||
|
||||
public class TestEventArgs : CancellableObjectEventArgs
|
||||
{
|
||||
public TestEventArgs(object eventObject) : base(eventObject)
|
||||
{
|
||||
}
|
||||
|
||||
public object MyEventObject
|
||||
{
|
||||
get { return EventObject; }
|
||||
}
|
||||
}
|
||||
|
||||
[SupersedeEvent(typeof(TestEventArgs))]
|
||||
public class TestEventArgs2 : CancellableObjectEventArgs
|
||||
{
|
||||
public TestEventArgs2(object eventObject) : base(eventObject)
|
||||
{
|
||||
}
|
||||
|
||||
public object MyEventObject
|
||||
{
|
||||
get { return EventObject; }
|
||||
}
|
||||
}
|
||||
|
||||
public class PassiveEventDispatcher : QueuingEventDispatcherBase
|
||||
{
|
||||
public PassiveEventDispatcher()
|
||||
: base(false)
|
||||
{ }
|
||||
|
||||
protected override void ScopeExitCompleted()
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,8 +94,6 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Scoping
|
||||
Mock.Of<IUmbracoDatabaseFactory>(),
|
||||
fileSystems,
|
||||
new TestOptionsMonitor<CoreDebugSettings>(new CoreDebugSettings()),
|
||||
mediaFileManager,
|
||||
loggerFactory.CreateLogger<ScopeProvider>(),
|
||||
loggerFactory,
|
||||
Mock.Of<IRequestCache>(),
|
||||
eventAggregatorMock.Object
|
||||
|
||||
@@ -8,7 +8,7 @@ using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Persistence.Repositories;
|
||||
using Umbraco.Cms.Infrastructure.Services.Implement;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Tests.UnitTests.AutoFixture;
|
||||
using ContentVersionCleanupPolicySettings = Umbraco.Cms.Core.Models.ContentVersionCleanupPolicySettings;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// Copyright (c) Umbraco.
|
||||
// See LICENSE for more details.
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -19,7 +20,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.ShortStringHelper
|
||||
{
|
||||
var requestHandlerSettings = new RequestHandlerSettings()
|
||||
{
|
||||
CharCollection = Enumerable.Empty<IChar>(),
|
||||
CharCollection = Array.Empty<CharItem>(),
|
||||
EnableDefaultCharReplacements = false,
|
||||
ConvertUrlsToAscii = "false"
|
||||
};
|
||||
|
||||
@@ -45,7 +47,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.ShortStringHelper
|
||||
{
|
||||
var requestHandlerSettings = new RequestHandlerSettings()
|
||||
{
|
||||
CharCollection = Enumerable.Empty<IChar>(),
|
||||
CharCollection = Array.Empty<CharItem>(),
|
||||
EnableDefaultCharReplacements = false,
|
||||
ConvertUrlsToAscii = "false"
|
||||
};
|
||||
|
||||
@@ -339,7 +342,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.ShortStringHelper
|
||||
{
|
||||
var requestHandlerSettings = new RequestHandlerSettings()
|
||||
{
|
||||
CharCollection = Enumerable.Empty<IChar>(),
|
||||
CharCollection = Array.Empty<CharItem>(),
|
||||
EnableDefaultCharReplacements = false,
|
||||
ConvertUrlsToAscii = "false"
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user