|
9 | 9 |
|
10 | 10 | namespace AutoMapper.Collection |
11 | 11 | { |
12 | | - public class InheritanceWithCollectionTests |
| 12 | + public abstract class InheritanceWithCollectionTests |
13 | 13 | { |
| 14 | + protected abstract void Create(IMapperConfigurationExpression cfg); |
| 15 | + |
14 | 16 | private IMapper CreateMapper() |
15 | 17 | { |
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 | | - |
58 | 18 | var map = new MapperConfiguration(Create); |
59 | 19 | map.AssertConfigurationIsValid(); |
60 | 20 | map.CompileMappings(); |
61 | 21 |
|
62 | 22 | return map.CreateMapper(); |
63 | 23 | } |
64 | 24 |
|
| 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 | + |
65 | 50 | [Fact] |
66 | 51 | public void Map_Should_ReturnOnlineOrderEf_When_ListIsOfTypeOrderEf() |
67 | 52 | { |
@@ -205,5 +190,95 @@ public List<OrderEf> Resolve(RootDomain source, RootEf destination, List<OrderEf |
205 | 190 | return efOrders; |
206 | 191 | } |
207 | 192 | } |
| 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 | + } |
208 | 283 | } |
209 | 284 | } |
0 commit comments