Skip to content

Commit cf38e3a

Browse files
author
Paul Johnson
committed
Separate customizations for clarity
1 parent 17abf04 commit cf38e3a

File tree

5 files changed

+106
-89
lines changed

5 files changed

+106
-89
lines changed

tests/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs

Lines changed: 1 addition & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,10 @@
22
// See LICENSE for more details.
33

44
using System;
5-
using System.Linq;
6-
using AutoFixture;
7-
using AutoFixture.AutoMoq;
8-
using AutoFixture.Kernel;
95
using AutoFixture.NUnit3;
10-
using Microsoft.AspNetCore.Http;
11-
using Microsoft.AspNetCore.Identity;
12-
using Microsoft.Extensions.Options;
13-
using Moq;
14-
using Umbraco.Cms.Core;
15-
using Umbraco.Cms.Core.Composing;
16-
using Umbraco.Cms.Core.Configuration;
17-
using Umbraco.Cms.Core.Configuration.Models;
18-
using Umbraco.Cms.Core.Hosting;
19-
using Umbraco.Cms.Core.Security;
20-
using Umbraco.Cms.Core.Services;
21-
using Umbraco.Cms.Web.BackOffice.Controllers;
22-
using Umbraco.Cms.Web.BackOffice.Install;
23-
using Umbraco.Cms.Web.BackOffice.Routing;
24-
using Umbraco.Cms.Web.Common.AspNetCore;
25-
using Umbraco.Cms.Web.Common.Security;
266

277
namespace Umbraco.Cms.Tests.UnitTests.AutoFixture
288
{
29-
309
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor)]
3110
public class AutoMoqDataAttribute : AutoDataAttribute
3211
{
@@ -36,73 +15,8 @@ public class AutoMoqDataAttribute : AutoDataAttribute
3615
/// [Frozen] can be used to ensure the same variable is injected and available as parameter for the test
3716
/// </summary>
3817
public AutoMoqDataAttribute()
39-
: base(() => AutoMockCustomizations.Default)
18+
: base(UmbracoAutoMoqFixtureFactory.CreateDefaultFixture)
4019
{
4120
}
42-
43-
internal static class AutoMockCustomizations
44-
{
45-
46-
public static IFixture Default => new Fixture().Customize(new UmbracoCustomization());
47-
48-
private class UmbracoCustomization : ICustomization
49-
{
50-
public void Customize(IFixture fixture)
51-
{
52-
fixture.Customize<BackOfficeIdentityUser>(
53-
u => u.FromFactory<string, string, string>(
54-
(a, b, c) => BackOfficeIdentityUser.CreateNew(new GlobalSettings(), a, b, c)));
55-
fixture
56-
.Customize(new ConstructorCustomization(typeof(UsersController), new GreedyConstructorQuery()))
57-
.Customize(new ConstructorCustomization(typeof(InstallController), new GreedyConstructorQuery()))
58-
.Customize(new ConstructorCustomization(typeof(PreviewController), new GreedyConstructorQuery()))
59-
.Customize(new ConstructorCustomization(typeof(MemberController), new GreedyConstructorQuery()))
60-
.Customize(new ConstructorCustomization(typeof(BackOfficeController), new GreedyConstructorQuery()))
61-
.Customize(new ConstructorCustomization(typeof(BackOfficeUserManager), new GreedyConstructorQuery()))
62-
.Customize(new ConstructorCustomization(typeof(MemberManager), new GreedyConstructorQuery()));
63-
64-
fixture.Customize(new AutoMoqCustomization(){ConfigureMembers = true});
65-
66-
// When requesting an IUserStore ensure we actually uses a IUserLockoutStore
67-
fixture.Customize<IUserStore<BackOfficeIdentityUser>>(cc => cc.FromFactory(() => Mock.Of<IUserLockoutStore<BackOfficeIdentityUser>>()));
68-
69-
fixture.Customize<ConfigConnectionString>(
70-
u => u.FromFactory<string, string, string>(
71-
(a, b, c) => new ConfigConnectionString(a, b, c)));
72-
73-
fixture.Customize<IUmbracoVersion>(
74-
u => u.FromFactory(
75-
() => new UmbracoVersion()));
76-
77-
fixture.Customize<HostingSettings>(x =>
78-
x.With(settings => settings.ApplicationVirtualPath, string.Empty));
79-
fixture.Customize<BackOfficeAreaRoutes>(u => u.FromFactory(
80-
() => new BackOfficeAreaRoutes(
81-
Options.Create(new GlobalSettings()),
82-
Mock.Of<IHostingEnvironment>(x => x.ToAbsolute(It.IsAny<string>()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty),
83-
Mock.Of<IRuntimeState>(x => x.Level == RuntimeLevel.Run),
84-
new UmbracoApiControllerTypeCollection(() => Enumerable.Empty<Type>()))));
85-
86-
fixture.Customize<PreviewRoutes>(u => u.FromFactory(
87-
() => new PreviewRoutes(
88-
Options.Create(new GlobalSettings()),
89-
Mock.Of<IHostingEnvironment>(x => x.ToAbsolute(It.IsAny<string>()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty),
90-
Mock.Of<IRuntimeState>(x => x.Level == RuntimeLevel.Run))));
91-
92-
var configConnectionString = new ConfigConnectionString("ss",
93-
"Data Source=(localdb)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Umbraco.mdf;Integrated Security=True");
94-
fixture.Customize<ConfigConnectionString>(x => x.FromFactory(() => configConnectionString));
95-
96-
97-
var httpContextAccessor = new HttpContextAccessor { HttpContext = new DefaultHttpContext() };
98-
fixture.Customize<HttpContext>(x => x.FromFactory(() => httpContextAccessor.HttpContext));
99-
fixture.Customize<IHttpContextAccessor>(x => x.FromFactory(() => httpContextAccessor));
100-
101-
fixture.Customize<WebRoutingSettings>(x => x.With(settings => settings.UmbracoApplicationUrl, "http://localhost:5000"));
102-
103-
fixture.Behaviors.Add(new OmitOnRecursionBehavior());
104-
}
105-
}
106-
}
10721
}
10822
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using AutoFixture;
2+
3+
namespace Umbraco.Cms.Tests.UnitTests.AutoFixture.Customizations
4+
{
5+
internal class OmitRecursionCustomization : ICustomization
6+
{
7+
public void Customize(IFixture fixture) =>
8+
fixture.Behaviors.Add(new OmitOnRecursionBehavior());
9+
}
10+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using System;
2+
using System.Linq;
3+
using AutoFixture;
4+
using AutoFixture.Kernel;
5+
using Microsoft.AspNetCore.Http;
6+
using Microsoft.AspNetCore.Identity;
7+
using Microsoft.Extensions.Options;
8+
using Moq;
9+
using Umbraco.Cms.Core;
10+
using Umbraco.Cms.Core.Configuration;
11+
using Umbraco.Cms.Core.Configuration.Models;
12+
using Umbraco.Cms.Core.Hosting;
13+
using Umbraco.Cms.Core.Security;
14+
using Umbraco.Cms.Core.Services;
15+
using Umbraco.Cms.Web.BackOffice.Controllers;
16+
using Umbraco.Cms.Web.BackOffice.Install;
17+
using Umbraco.Cms.Web.BackOffice.Routing;
18+
using Umbraco.Cms.Web.Common.Security;
19+
20+
namespace Umbraco.Cms.Tests.UnitTests.AutoFixture.Customizations
21+
{
22+
internal class UmbracoCustomizations : ICustomization
23+
{
24+
public void Customize(IFixture fixture)
25+
{
26+
fixture.Customize<BackOfficeIdentityUser>(
27+
u => u.FromFactory<string, string, string>(
28+
(a, b, c) => BackOfficeIdentityUser.CreateNew(new GlobalSettings(), a, b, c)));
29+
30+
fixture
31+
.Customize(new ConstructorCustomization(typeof(UsersController), new GreedyConstructorQuery()))
32+
.Customize(new ConstructorCustomization(typeof(InstallController), new GreedyConstructorQuery()))
33+
.Customize(new ConstructorCustomization(typeof(PreviewController), new GreedyConstructorQuery()))
34+
.Customize(new ConstructorCustomization(typeof(MemberController), new GreedyConstructorQuery()))
35+
.Customize(new ConstructorCustomization(typeof(BackOfficeController), new GreedyConstructorQuery()))
36+
.Customize(new ConstructorCustomization(typeof(BackOfficeUserManager), new GreedyConstructorQuery()))
37+
.Customize(new ConstructorCustomization(typeof(MemberManager), new GreedyConstructorQuery()));
38+
39+
// When requesting an IUserStore ensure we actually uses a IUserLockoutStore
40+
fixture.Customize<IUserStore<BackOfficeIdentityUser>>(cc => cc.FromFactory(Mock.Of<IUserLockoutStore<BackOfficeIdentityUser>>));
41+
42+
fixture.Customize<ConfigConnectionString>(
43+
u => u.FromFactory<string, string, string>(
44+
(a, b, c) => new ConfigConnectionString(a, b, c)));
45+
46+
fixture.Customize<IUmbracoVersion>(
47+
u => u.FromFactory(
48+
() => new UmbracoVersion()));
49+
50+
fixture.Customize<HostingSettings>(x =>
51+
x.With(settings => settings.ApplicationVirtualPath, string.Empty));
52+
53+
fixture.Customize<BackOfficeAreaRoutes>(u => u.FromFactory(
54+
() => new BackOfficeAreaRoutes(
55+
Options.Create(new GlobalSettings()),
56+
Mock.Of<IHostingEnvironment>(x => x.ToAbsolute(It.IsAny<string>()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty),
57+
Mock.Of<IRuntimeState>(x => x.Level == RuntimeLevel.Run),
58+
new UmbracoApiControllerTypeCollection(Enumerable.Empty<Type>))));
59+
60+
fixture.Customize<PreviewRoutes>(u => u.FromFactory(
61+
() => new PreviewRoutes(
62+
Options.Create(new GlobalSettings()),
63+
Mock.Of<IHostingEnvironment>(x => x.ToAbsolute(It.IsAny<string>()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty),
64+
Mock.Of<IRuntimeState>(x => x.Level == RuntimeLevel.Run))));
65+
66+
var configConnectionString = new ConfigConnectionString(
67+
"ss",
68+
"Data Source=(localdb)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Umbraco.mdf;Integrated Security=True");
69+
fixture.Customize<ConfigConnectionString>(x => x.FromFactory(() => configConnectionString));
70+
71+
var httpContextAccessor = new HttpContextAccessor { HttpContext = new DefaultHttpContext() };
72+
fixture.Customize<HttpContext>(x => x.FromFactory(() => httpContextAccessor.HttpContext));
73+
fixture.Customize<IHttpContextAccessor>(x => x.FromFactory(() => httpContextAccessor));
74+
75+
fixture.Customize<WebRoutingSettings>(x => x.With(settings => settings.UmbracoApplicationUrl, "http://localhost:5000"));
76+
}
77+
}
78+
}

tests/Umbraco.Tests.UnitTests/AutoFixture/InlineAutoMoqDataAttribute.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Umbraco.
1+
// Copyright (c) Umbraco.
22
// See LICENSE for more details.
33

44
using System;
@@ -15,7 +15,7 @@ public class InlineAutoMoqDataAttribute : InlineAutoDataAttribute
1515
/// [Frozen] can be used to ensure the same variable is injected and available as parameter for the test
1616
/// </summary>
1717
public InlineAutoMoqDataAttribute(params object[] arguments)
18-
: base(() => AutoMoqDataAttribute.AutoMockCustomizations.Default, arguments)
18+
: base(UmbracoAutoMoqFixtureFactory.CreateDefaultFixture, arguments)
1919
{
2020
}
2121
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using AutoFixture;
2+
using AutoFixture.AutoMoq;
3+
using Umbraco.Cms.Tests.UnitTests.AutoFixture.Customizations;
4+
5+
namespace Umbraco.Cms.Tests.UnitTests.AutoFixture
6+
{
7+
internal static class UmbracoAutoMoqFixtureFactory
8+
{
9+
internal static IFixture CreateDefaultFixture() =>
10+
new Fixture()
11+
.Customize(new AutoMoqCustomization { ConfigureMembers = true })
12+
.Customize(new OmitRecursionCustomization())
13+
.Customize(new UmbracoCustomizations());
14+
}
15+
}

0 commit comments

Comments
 (0)