From 776794f2cd25010497115e7a34e60d3e2f7eb188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 27 Jul 2017 13:31:54 +0300 Subject: [PATCH] Added automapper tests. --- .../Properties/AssemblyInfo.cs | 3 + .../AutoMapper_Inheritance_Tests.cs | 73 ++++++++ .../Volo/Abp/AutoMapper/AutoMapping_Tests.cs | 157 ++++++++++++++++++ 3 files changed, 233 insertions(+) create mode 100644 src/Volo.Abp.AutoMapper/Properties/AssemblyInfo.cs create mode 100644 test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs create mode 100644 test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs diff --git a/src/Volo.Abp.AutoMapper/Properties/AssemblyInfo.cs b/src/Volo.Abp.AutoMapper/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..c802202da0 --- /dev/null +++ b/src/Volo.Abp.AutoMapper/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Volo.Abp.AutoMapper.Tests")] diff --git a/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs b/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs new file mode 100644 index 0000000000..c1f823a543 --- /dev/null +++ b/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Inheritance_Tests.cs @@ -0,0 +1,73 @@ +using AutoMapper; +using Shouldly; +using Xunit; + +namespace Volo.Abp.AutoMapper +{ + public class AutoMapper_Inheritance_Tests + { + private readonly IMapper _mapper; + + public AutoMapper_Inheritance_Tests() + { + var config = new MapperConfiguration(configuration => + { + configuration.CreateAutoAttributeMaps(typeof(MyTargetClassToMap)); + configuration.CreateAutoAttributeMaps(typeof(EntityDto)); + configuration.CreateAutoAttributeMaps(typeof(DerivedEntityDto)); + }); + + _mapper = config.CreateMapper(); + } + + [Fact] + public void Should_Map_Derived_To_Target() + { + var derived = new MyDerivedClass { Value = "fortytwo" }; + var target = _mapper.Map(derived); + target.Value.ShouldBe("fortytwo"); + } + + public class MyBaseClass + { + public string Value { get; set; } + } + + public class MyDerivedClass : MyBaseClass + { + + } + + [AutoMapFrom(typeof(MyBaseClass))] + public class MyTargetClassToMap + { + public string Value { get; set; } + } + + //[Fact] //TODO: That's a problem but related to AutoMapper rather than ABP. + public void Should_Map_EntityProxy_To_EntityDto_And_To_DrivedEntityDto() + { + var proxy = new EntityProxy() { Value = "42"}; + var target = _mapper.Map(proxy); + var target2 = _mapper.Map(proxy); + target.Value.ShouldBe("42"); + target2.Value.ShouldBe("42"); + } + + public class Entity + { + public string Value { get; set; } + } + public class DerivedEntity : Entity { } + public class EntityProxy : DerivedEntity { } + + [AutoMapFrom(typeof(Entity))] + public class EntityDto + { + public string Value { get; set; } + } + + [AutoMapFrom(typeof(DerivedEntity))] + public class DerivedEntityDto : EntityDto { } + } +} diff --git a/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs b/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs new file mode 100644 index 0000000000..58839b30b6 --- /dev/null +++ b/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapping_Tests.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using AutoMapper; +using Shouldly; +using Xunit; + +namespace Volo.Abp.AutoMapper +{ + public class AutoMapping_Tests + { + private readonly IMapper _mapper; + + public AutoMapping_Tests() + { + var config = new MapperConfiguration(configuration => + { + configuration.CreateAutoAttributeMaps(typeof(MyClass1)); + configuration.CreateAutoAttributeMaps(typeof(MyClass2)); + }); + + _mapper = config.CreateMapper(); + } + + [Fact] + public void Map_Null_Tests() + { + MyClass1 obj1 = null; + var obj2 = _mapper.Map(obj1); + obj2.ShouldBe(null); + } + + [Fact] + public void Map_Null_Existing_Object_Tests() + { + MyClass1 obj1 = null; + + var obj2 = new MyClass2 { TestProp = "before map" }; + _mapper.Map(obj1, obj2); + obj2.TestProp.ShouldBe("before map"); + } + + [Fact] + public void MapTo_Tests() + { + var obj1 = new MyClass1 { TestProp = "Test value" }; + + var obj2 = _mapper.Map(obj1); + obj2.TestProp.ShouldBe("Test value"); + + var obj3 = _mapper.Map(obj1); + obj3.TestProp.ShouldBe("Test value"); + } + + [Fact] + public void MapTo_Existing_Object_Tests() + { + var obj1 = new MyClass1 { TestProp = "Test value" }; + + var obj2 = new MyClass2(); + _mapper.Map(obj1, obj2); + obj2.TestProp.ShouldBe("Test value"); + + var obj3 = new MyClass3(); + _mapper.Map(obj2, obj3); + obj3.TestProp.ShouldBe("Test value"); + + Assert.ThrowsAny(() => //Did not define reverse mapping! + { + _mapper.Map(obj3, obj2); + }); + } + + [Fact] + public void MapFrom_Tests() + { + var obj2 = new MyClass2 { TestProp = "Test value" }; + + var obj1 = _mapper.Map(obj2); + obj1.TestProp.ShouldBe("Test value"); + } + + [Fact] + public void IgnoreMap_Tests() + { + var obj2 = new MyClass2 {TestProp = "Test value", AnotherValue = 42}; + var obj3 = _mapper.Map(obj2); + obj3.TestProp.ShouldBe("Test value"); + obj3.AnotherValue.ShouldBe(0); //Ignored because of IgnoreMap attribute! + } + + [Fact] + public void MapTo_Collection_Tests() + { + var list1 = new List + { + new MyClass1 {TestProp = "Test value 1"}, + new MyClass1 {TestProp = "Test value 2"} + }; + + var list2 = _mapper.Map>(list1); + list2.Count.ShouldBe(2); + list2[0].TestProp.ShouldBe("Test value 1"); + list2[1].TestProp.ShouldBe("Test value 2"); + } + + [Fact] + public void Map_Should_Set_Null_Existing_Object_Tests() + { + MyClass1 obj1 = new MyClass1 { TestProp = null }; + var obj2 = new MyClass2 { TestProp = "before map" }; + _mapper.Map(obj1, obj2); + obj2.TestProp.ShouldBe(null); + } + + [Fact] + public void Should_Map_Nullable_Value_To_Null_If_It_Is_Null_On_Source() + { + var obj1 = new MyClass1(); + var obj2 = _mapper.Map(obj1); + obj2.NullableValue.ShouldBeNull(); + } + + [Fact] + public void Should_Map_Nullable_Value_To__Not_Null_If_It_Is__Not_Null_On_Source() + { + var obj1 = new MyClass1 { NullableValue = 42 }; + var obj2 = _mapper.Map(obj1); + obj2.NullableValue.ShouldBe(42); + } + + [AutoMap(typeof(MyClass2), typeof(MyClass3))] + private class MyClass1 + { + public string TestProp { get; set; } + + public long? NullableValue { get; set; } + } + + [AutoMapTo(typeof(MyClass3))] + private class MyClass2 + { + public string TestProp { get; set; } + + public long? NullableValue { get; set; } + + public int AnotherValue { get; set; } + } + + private class MyClass3 + { + public string TestProp { get; set; } + + [IgnoreMap] + public int AnotherValue { get; set; } + } + } +}