diff --git a/tests/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs b/tests/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs index f543d847b1..7134891f11 100644 --- a/tests/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs +++ b/tests/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs @@ -2,31 +2,10 @@ // See LICENSE for more details. using System; -using System.Linq; -using AutoFixture; -using AutoFixture.AutoMoq; -using AutoFixture.Kernel; using AutoFixture.NUnit3; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Identity; -using Microsoft.Extensions.Options; -using Moq; -using Umbraco.Cms.Core; -using Umbraco.Cms.Core.Composing; -using Umbraco.Cms.Core.Configuration; -using Umbraco.Cms.Core.Configuration.Models; -using Umbraco.Cms.Core.Hosting; -using Umbraco.Cms.Core.Security; -using Umbraco.Cms.Core.Services; -using Umbraco.Cms.Web.BackOffice.Controllers; -using Umbraco.Cms.Web.BackOffice.Install; -using Umbraco.Cms.Web.BackOffice.Routing; -using Umbraco.Cms.Web.Common.AspNetCore; -using Umbraco.Cms.Web.Common.Security; namespace Umbraco.Cms.Tests.UnitTests.AutoFixture { - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor)] public class AutoMoqDataAttribute : AutoDataAttribute { @@ -36,73 +15,8 @@ namespace Umbraco.Cms.Tests.UnitTests.AutoFixture /// [Frozen] can be used to ensure the same variable is injected and available as parameter for the test /// public AutoMoqDataAttribute() - : base(() => AutoMockCustomizations.Default) + : base(UmbracoAutoMoqFixtureFactory.CreateDefaultFixture) { } - - internal static class AutoMockCustomizations - { - - public static IFixture Default => new Fixture().Customize(new UmbracoCustomization()); - - private class UmbracoCustomization : ICustomization - { - public void Customize(IFixture fixture) - { - fixture.Customize( - u => u.FromFactory( - (a, b, c) => BackOfficeIdentityUser.CreateNew(new GlobalSettings(), a, b, c))); - fixture - .Customize(new ConstructorCustomization(typeof(UsersController), new GreedyConstructorQuery())) - .Customize(new ConstructorCustomization(typeof(InstallController), new GreedyConstructorQuery())) - .Customize(new ConstructorCustomization(typeof(PreviewController), new GreedyConstructorQuery())) - .Customize(new ConstructorCustomization(typeof(MemberController), new GreedyConstructorQuery())) - .Customize(new ConstructorCustomization(typeof(BackOfficeController), new GreedyConstructorQuery())) - .Customize(new ConstructorCustomization(typeof(BackOfficeUserManager), new GreedyConstructorQuery())) - .Customize(new ConstructorCustomization(typeof(MemberManager), new GreedyConstructorQuery())); - - fixture.Customize(new AutoMoqCustomization(){ConfigureMembers = true}); - - // When requesting an IUserStore ensure we actually uses a IUserLockoutStore - fixture.Customize>(cc => cc.FromFactory(() => Mock.Of>())); - - fixture.Customize( - u => u.FromFactory( - (a, b, c) => new ConfigConnectionString(a, b, c))); - - fixture.Customize( - u => u.FromFactory( - () => new UmbracoVersion())); - - fixture.Customize(x => - x.With(settings => settings.ApplicationVirtualPath, string.Empty)); - fixture.Customize(u => u.FromFactory( - () => new BackOfficeAreaRoutes( - Options.Create(new GlobalSettings()), - Mock.Of(x => x.ToAbsolute(It.IsAny()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty), - Mock.Of(x => x.Level == RuntimeLevel.Run), - new UmbracoApiControllerTypeCollection(() => Enumerable.Empty())))); - - fixture.Customize(u => u.FromFactory( - () => new PreviewRoutes( - Options.Create(new GlobalSettings()), - Mock.Of(x => x.ToAbsolute(It.IsAny()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty), - Mock.Of(x => x.Level == RuntimeLevel.Run)))); - - var configConnectionString = new ConfigConnectionString("ss", - "Data Source=(localdb)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Umbraco.mdf;Integrated Security=True"); - fixture.Customize(x => x.FromFactory(() => configConnectionString)); - - - var httpContextAccessor = new HttpContextAccessor { HttpContext = new DefaultHttpContext() }; - fixture.Customize(x => x.FromFactory(() => httpContextAccessor.HttpContext)); - fixture.Customize(x => x.FromFactory(() => httpContextAccessor)); - - fixture.Customize(x => x.With(settings => settings.UmbracoApplicationUrl, "http://localhost:5000")); - - fixture.Behaviors.Add(new OmitOnRecursionBehavior()); - } - } - } } } diff --git a/tests/Umbraco.Tests.UnitTests/AutoFixture/Customizations/OmitRecursionCustomization.cs b/tests/Umbraco.Tests.UnitTests/AutoFixture/Customizations/OmitRecursionCustomization.cs new file mode 100644 index 0000000000..8a799c2401 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/AutoFixture/Customizations/OmitRecursionCustomization.cs @@ -0,0 +1,10 @@ +using AutoFixture; + +namespace Umbraco.Cms.Tests.UnitTests.AutoFixture.Customizations +{ + internal class OmitRecursionCustomization : ICustomization + { + public void Customize(IFixture fixture) => + fixture.Behaviors.Add(new OmitOnRecursionBehavior()); + } +} diff --git a/tests/Umbraco.Tests.UnitTests/AutoFixture/Customizations/UmbracoCustomizations.cs b/tests/Umbraco.Tests.UnitTests/AutoFixture/Customizations/UmbracoCustomizations.cs new file mode 100644 index 0000000000..672bbd0862 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/AutoFixture/Customizations/UmbracoCustomizations.cs @@ -0,0 +1,78 @@ +using System; +using System.Linq; +using AutoFixture; +using AutoFixture.Kernel; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Options; +using Moq; +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Hosting; +using Umbraco.Cms.Core.Security; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Web.BackOffice.Controllers; +using Umbraco.Cms.Web.BackOffice.Install; +using Umbraco.Cms.Web.BackOffice.Routing; +using Umbraco.Cms.Web.Common.Security; + +namespace Umbraco.Cms.Tests.UnitTests.AutoFixture.Customizations +{ + internal class UmbracoCustomizations : ICustomization + { + public void Customize(IFixture fixture) + { + fixture.Customize( + u => u.FromFactory( + (a, b, c) => BackOfficeIdentityUser.CreateNew(new GlobalSettings(), a, b, c))); + + fixture + .Customize(new ConstructorCustomization(typeof(UsersController), new GreedyConstructorQuery())) + .Customize(new ConstructorCustomization(typeof(InstallController), new GreedyConstructorQuery())) + .Customize(new ConstructorCustomization(typeof(PreviewController), new GreedyConstructorQuery())) + .Customize(new ConstructorCustomization(typeof(MemberController), new GreedyConstructorQuery())) + .Customize(new ConstructorCustomization(typeof(BackOfficeController), new GreedyConstructorQuery())) + .Customize(new ConstructorCustomization(typeof(BackOfficeUserManager), new GreedyConstructorQuery())) + .Customize(new ConstructorCustomization(typeof(MemberManager), new GreedyConstructorQuery())); + + // When requesting an IUserStore ensure we actually uses a IUserLockoutStore + fixture.Customize>(cc => cc.FromFactory(Mock.Of>)); + + fixture.Customize( + u => u.FromFactory( + (a, b, c) => new ConfigConnectionString(a, b, c))); + + fixture.Customize( + u => u.FromFactory( + () => new UmbracoVersion())); + + fixture.Customize(x => + x.With(settings => settings.ApplicationVirtualPath, string.Empty)); + + fixture.Customize(u => u.FromFactory( + () => new BackOfficeAreaRoutes( + Options.Create(new GlobalSettings()), + Mock.Of(x => x.ToAbsolute(It.IsAny()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty), + Mock.Of(x => x.Level == RuntimeLevel.Run), + new UmbracoApiControllerTypeCollection(Enumerable.Empty)))); + + fixture.Customize(u => u.FromFactory( + () => new PreviewRoutes( + Options.Create(new GlobalSettings()), + Mock.Of(x => x.ToAbsolute(It.IsAny()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty), + Mock.Of(x => x.Level == RuntimeLevel.Run)))); + + var configConnectionString = new ConfigConnectionString( + "ss", + "Data Source=(localdb)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Umbraco.mdf;Integrated Security=True"); + fixture.Customize(x => x.FromFactory(() => configConnectionString)); + + var httpContextAccessor = new HttpContextAccessor { HttpContext = new DefaultHttpContext() }; + fixture.Customize(x => x.FromFactory(() => httpContextAccessor.HttpContext)); + fixture.Customize(x => x.FromFactory(() => httpContextAccessor)); + + fixture.Customize(x => x.With(settings => settings.UmbracoApplicationUrl, "http://localhost:5000")); + } + } +} diff --git a/tests/Umbraco.Tests.UnitTests/AutoFixture/InlineAutoMoqDataAttribute.cs b/tests/Umbraco.Tests.UnitTests/AutoFixture/InlineAutoMoqDataAttribute.cs index c06ff1a0f3..a4a28477b1 100644 --- a/tests/Umbraco.Tests.UnitTests/AutoFixture/InlineAutoMoqDataAttribute.cs +++ b/tests/Umbraco.Tests.UnitTests/AutoFixture/InlineAutoMoqDataAttribute.cs @@ -1,4 +1,4 @@ -// Copyright (c) Umbraco. +// Copyright (c) Umbraco. // See LICENSE for more details. using System; @@ -15,7 +15,7 @@ namespace Umbraco.Cms.Tests.UnitTests.AutoFixture /// [Frozen] can be used to ensure the same variable is injected and available as parameter for the test /// public InlineAutoMoqDataAttribute(params object[] arguments) - : base(() => AutoMoqDataAttribute.AutoMockCustomizations.Default, arguments) + : base(UmbracoAutoMoqFixtureFactory.CreateDefaultFixture, arguments) { } } diff --git a/tests/Umbraco.Tests.UnitTests/AutoFixture/UmbracoAutoMoqFixtureFactory.cs b/tests/Umbraco.Tests.UnitTests/AutoFixture/UmbracoAutoMoqFixtureFactory.cs new file mode 100644 index 0000000000..114cef063c --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/AutoFixture/UmbracoAutoMoqFixtureFactory.cs @@ -0,0 +1,15 @@ +using AutoFixture; +using AutoFixture.AutoMoq; +using Umbraco.Cms.Tests.UnitTests.AutoFixture.Customizations; + +namespace Umbraco.Cms.Tests.UnitTests.AutoFixture +{ + internal static class UmbracoAutoMoqFixtureFactory + { + internal static IFixture CreateDefaultFixture() => + new Fixture() + .Customize(new AutoMoqCustomization { ConfigureMembers = true }) + .Customize(new OmitRecursionCustomization()) + .Customize(new UmbracoCustomizations()); + } +}