Skip to content

Commit cd1d0d8

Browse files
committed
Add test for inverted collection-include tests
.
1 parent cf8eb32 commit cd1d0d8

File tree

1 file changed

+118
-43
lines changed

1 file changed

+118
-43
lines changed

src/AutoMapper.Collection.Tests/InheritanceWithCollectionTests.cs

Lines changed: 118 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -9,59 +9,44 @@
99

1010
namespace AutoMapper.Collection
1111
{
12-
public class InheritanceWithCollectionTests
12+
public abstract class InheritanceWithCollectionTests
1313
{
14+
protected abstract void Create(IMapperConfigurationExpression cfg);
15+
1416
private IMapper CreateMapper()
1517
{
16-
void Create(IMapperConfigurationExpression cfg)
17-
{
18-
cfg.ShouldMapProperty = propertyInfo => propertyInfo.GetMethod.IsPublic || propertyInfo.GetMethod.IsAssembly || propertyInfo.GetMethod.IsFamily || propertyInfo.GetMethod.IsPrivate;
19-
cfg.AddCollectionMappers();
20-
21-
//DOMAIN --> EF
22-
cfg.CreateMap<RootDomain, RootEf>()
23-
.ForMember(rootEf => rootEf.Orders, opt => opt.ResolveUsing<MergeDomainOrdersToEfOrdersValueResolver>())
24-
;
25-
26-
//collection type
27-
cfg.CreateMap<OrderDomain, OrderEf>()
28-
.EqualityComparison((oo, dto) => BaseEquals(oo, dto))
29-
;
30-
31-
cfg.CreateMap<OnlineOrderDomain, OnlineOrderEf>()
32-
.EqualityComparison((ood, ooe) => DerivedEquals(ood, ooe))
33-
.IncludeBase<OrderDomain, OrderEf>()
34-
;
35-
36-
cfg.CreateMap<MailOrderDomain, MailOrderEf>()
37-
.IncludeBase<OrderDomain, OrderEf>()
38-
;
39-
40-
//EF --> DOMAIN
41-
cfg.CreateMap<RootEf, RootDomain>()
42-
.ForMember(rootDomain => rootDomain.OnlineOrders, opt => opt.MapFrom(rootEf => rootEf.Orders.Where(orderEf => orderEf.GetType() == typeof(OnlineOrderEf))))
43-
.ForMember(rootDomain => rootDomain.MailOrders, opt => opt.MapFrom(rootEf => rootEf.Orders.Where(orderEf => orderEf.GetType() == typeof(MailOrderEf))))
44-
;
45-
46-
cfg.CreateMap<OrderEf, OrderDomain>()
47-
;
48-
49-
cfg.CreateMap<OnlineOrderEf, OnlineOrderDomain>()
50-
.IncludeBase<OrderEf, OrderDomain>()
51-
;
52-
53-
cfg.CreateMap<MailOrderEf, MailOrderDomain>()
54-
.IncludeBase<OrderEf, OrderDomain>()
55-
;
56-
}
57-
5818
var map = new MapperConfiguration(Create);
5919
map.AssertConfigurationIsValid();
6020
map.CompileMappings();
6121

6222
return map.CreateMapper();
6323
}
6424

25+
[Fact]
26+
public void TypeMap_Should_include_base_types()
27+
{
28+
var mapper = CreateMapper();
29+
var typeMap = mapper.ConfigurationProvider.ResolveTypeMap(typeof(MailOrderDomain), typeof(OrderEf));
30+
31+
var typePairs = new[]{
32+
new TypePair(typeof(OrderDomain), typeof(OrderEf))
33+
};
34+
typeMap.IncludedBaseTypes.ShouldBeEquivalentTo(typePairs);
35+
}
36+
37+
[Fact]
38+
public void TypeMap_Should_include_derivied_types()
39+
{
40+
var mapper = CreateMapper();
41+
var typeMap = mapper.ConfigurationProvider.ResolveTypeMap(typeof(OrderDomain), typeof(OrderEf));
42+
43+
var typePairs = new[]{
44+
new TypePair(typeof(OnlineOrderDomain), typeof(OnlineOrderEf)),
45+
new TypePair(typeof(MailOrderDomain), typeof(MailOrderEf))
46+
};
47+
typeMap.IncludedDerivedTypes.ShouldBeEquivalentTo(typePairs);
48+
}
49+
6550
[Fact]
6651
public void Map_Should_ReturnOnlineOrderEf_When_ListIsOfTypeOrderEf()
6752
{
@@ -205,5 +190,95 @@ public List<OrderEf> Resolve(RootDomain source, RootEf destination, List<OrderEf
205190
return efOrders;
206191
}
207192
}
193+
194+
public class Include : InheritanceWithCollectionTests
195+
{
196+
protected override void Create(IMapperConfigurationExpression cfg)
197+
{
198+
cfg.ShouldMapProperty = propertyInfo => propertyInfo.GetMethod.IsPublic || propertyInfo.GetMethod.IsAssembly || propertyInfo.GetMethod.IsFamily || propertyInfo.GetMethod.IsPrivate;
199+
cfg.AddCollectionMappers();
200+
201+
//DOMAIN --> EF
202+
cfg.CreateMap<RootDomain, RootEf>()
203+
.ForMember(rootEf => rootEf.Orders, opt => opt.ResolveUsing<MergeDomainOrdersToEfOrdersValueResolver>())
204+
;
205+
206+
//collection type
207+
cfg.CreateMap<OrderDomain, OrderEf>()
208+
.EqualityComparison((oo, dto) => BaseEquals(oo, dto))
209+
.Include<MailOrderDomain, MailOrderEf>()
210+
.Include<OnlineOrderDomain, OnlineOrderEf>()
211+
;
212+
213+
cfg.CreateMap<OnlineOrderDomain, OnlineOrderEf>()
214+
.EqualityComparison((ood, ooe) => DerivedEquals(ood, ooe))
215+
;
216+
217+
cfg.CreateMap<MailOrderDomain, MailOrderEf>()
218+
;
219+
220+
//EF --> DOMAIN
221+
cfg.CreateMap<RootEf, RootDomain>()
222+
.ForMember(rootDomain => rootDomain.OnlineOrders, opt => opt.MapFrom(rootEf => rootEf.Orders.Where(orderEf => orderEf.GetType() == typeof(OnlineOrderEf))))
223+
.ForMember(rootDomain => rootDomain.MailOrders, opt => opt.MapFrom(rootEf => rootEf.Orders.Where(orderEf => orderEf.GetType() == typeof(MailOrderEf))))
224+
;
225+
226+
cfg.CreateMap<OrderEf, OrderDomain>()
227+
.Include<OnlineOrderEf, OnlineOrderDomain>()
228+
.Include<MailOrderEf, MailOrderDomain>()
229+
;
230+
231+
cfg.CreateMap<OnlineOrderEf, OnlineOrderDomain>()
232+
;
233+
234+
cfg.CreateMap<MailOrderEf, MailOrderDomain>()
235+
;
236+
}
237+
}
238+
239+
public class IncludeBase : InheritanceWithCollectionTests
240+
{
241+
protected override void Create(IMapperConfigurationExpression cfg)
242+
{
243+
cfg.ShouldMapProperty = propertyInfo => propertyInfo.GetMethod.IsPublic || propertyInfo.GetMethod.IsAssembly || propertyInfo.GetMethod.IsFamily || propertyInfo.GetMethod.IsPrivate;
244+
cfg.AddCollectionMappers();
245+
246+
//DOMAIN --> EF
247+
cfg.CreateMap<RootDomain, RootEf>()
248+
.ForMember(rootEf => rootEf.Orders, opt => opt.ResolveUsing<MergeDomainOrdersToEfOrdersValueResolver>())
249+
;
250+
251+
//collection type
252+
cfg.CreateMap<OrderDomain, OrderEf>()
253+
.EqualityComparison((oo, dto) => BaseEquals(oo, dto))
254+
;
255+
256+
cfg.CreateMap<OnlineOrderDomain, OnlineOrderEf>()
257+
.EqualityComparison((ood, ooe) => DerivedEquals(ood, ooe))
258+
.IncludeBase<OrderDomain, OrderEf>()
259+
;
260+
261+
cfg.CreateMap<MailOrderDomain, MailOrderEf>()
262+
.IncludeBase<OrderDomain, OrderEf>()
263+
;
264+
265+
//EF --> DOMAIN
266+
cfg.CreateMap<RootEf, RootDomain>()
267+
.ForMember(rootDomain => rootDomain.OnlineOrders, opt => opt.MapFrom(rootEf => rootEf.Orders.Where(orderEf => orderEf.GetType() == typeof(OnlineOrderEf))))
268+
.ForMember(rootDomain => rootDomain.MailOrders, opt => opt.MapFrom(rootEf => rootEf.Orders.Where(orderEf => orderEf.GetType() == typeof(MailOrderEf))))
269+
;
270+
271+
cfg.CreateMap<OrderEf, OrderDomain>()
272+
;
273+
274+
cfg.CreateMap<OnlineOrderEf, OnlineOrderDomain>()
275+
.IncludeBase<OrderEf, OrderDomain>()
276+
;
277+
278+
cfg.CreateMap<MailOrderEf, MailOrderDomain>()
279+
.IncludeBase<OrderEf, OrderDomain>()
280+
;
281+
}
282+
}
208283
}
209284
}

0 commit comments

Comments
 (0)