-
Notifications
You must be signed in to change notification settings - Fork 405
Expand file tree
/
Copy pathHostBuilderExtensionsTests.cs
More file actions
115 lines (98 loc) · 3.88 KB
/
HostBuilderExtensionsTests.cs
File metadata and controls
115 lines (98 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
namespace Mapster.DependencyInjection.Tests;
[TestClass]
public class HostBuilderExtensionsTests
{
[TestMethod]
public void UseMapster_WithConfigureMappers_AllowsCustomTypeAdapterConfigConfiguration()
{
// Arrange
var host = new HostBuilder()
.UseMapster(
configureMappers: (ctx, services) =>
{
services.AddTypeAdapterConfig(ctx, useGlobalConfig: false, configure: config =>
{
config.NewConfig<ValueSource, ValueDest>()
.Map(dest => dest.Value, src => src.Value * 2);
return config;
});
})
.Build();
// Act
var mapper = host.Services.GetRequiredService<IMapper>();
var dest = mapper.Map<ValueDest>(new ValueSource { Value = 5 });
// Assert
dest.Value.ShouldBe(10);
}
[TestMethod]
public void UseMapster_Default_RegistersServices()
{
// Arrange
var host = new HostBuilder()
.UseMapster()
.Build();
// Act + Assert
host.Services.GetRequiredService<IOptions<MapsterOptions>>().ShouldNotBeNull();
host.Services.GetRequiredService<TypeAdapterConfig>().ShouldBe(TypeAdapterConfig.GlobalSettings);
host.Services.GetRequiredService<IMapper>().ShouldBeOfType<ServiceMapper>();
}
[TestMethod]
public void UseMapster_WhenCalledTwice_RunsConfigureMappersEachTime_ButRegistersCoreServicesOnce()
{
// Arrange
var configureMappersCalls = 0;
var typeAdapterConfigRegistrations = 0;
var mapperRegistrations = 0;
var mapsterOptionsConfigureRegistrations = 0;
var host = new HostBuilder()
.UseMapster(
configureMappers: (_, _) => configureMappersCalls++)
.UseMapster(
configureMappers: (_, _) => configureMappersCalls++)
.ConfigureServices((_, services) =>
{
typeAdapterConfigRegistrations = services.Count(d => d.ServiceType == typeof(TypeAdapterConfig));
mapperRegistrations = services.Count(d => d.ServiceType == typeof(IMapper));
mapsterOptionsConfigureRegistrations = services.Count(d => d.ServiceType == typeof(IConfigureOptions<MapsterOptions>));
})
.Build();
// Act + Assert
configureMappersCalls.ShouldBe(2);
typeAdapterConfigRegistrations.ShouldBe(1);
mapperRegistrations.ShouldBe(1);
mapsterOptionsConfigureRegistrations.ShouldBe(1);
host.Services.GetRequiredService<TypeAdapterConfig>().ShouldNotBeNull();
}
[TestMethod]
public void UseMapster_WhenUseGlobalConfigFalse_RegistersNewTypeAdapterConfigInstance()
{
// Arrange
var host = new HostBuilder()
.UseMapster(useGlobalConfig: false)
.Build();
// Act
var config = host.Services.GetRequiredService<TypeAdapterConfig>();
// Assert
ReferenceEquals(config, TypeAdapterConfig.GlobalSettings).ShouldBeFalse();
}
[TestMethod]
public void UseMapster_WhenRegisterMapsterSingletonFalse_DoesNotRegisterIMapper()
{
// Arrange
var host = new HostBuilder()
.UseMapster(registerDefaultMapper: false)
.Build();
// Act + Assert
host.Services.GetService<IMapper>().ShouldBeNull();
host.Services.GetRequiredService<TypeAdapterConfig>().ShouldNotBeNull();
host.Services.GetRequiredService<IOptions<MapsterOptions>>().ShouldNotBeNull();
}
private sealed class ValueSource
{
public int Value { get; set; }
}
private sealed class ValueDest
{
public int Value { get; set; }
}
}