Skip to content

Commit 59e1401

Browse files
committed
Merge branch '#28'
2 parents ab854d5 + 1690c71 commit 59e1401

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

Slapper.AutoMapper.Tests/MapDynamicTests.cs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,25 @@ public class Order
2222
public decimal OrderTotal;
2323
}
2424

25+
public class CustomerSingleOrder
26+
{
27+
public int Id;
28+
public string FirstName;
29+
public string LastName;
30+
public SingleOrder Order;
31+
}
32+
33+
public class SingleOrder
34+
{
35+
public int Id;
36+
public OrderDetails Details;
37+
}
38+
39+
public class OrderDetails
40+
{
41+
public string Address;
42+
}
43+
2544
[Test]
2645
public void Can_Handle_Mapping_A_Single_Dynamic_Object()
2746
{
@@ -66,5 +85,47 @@ public void Can_Handle_Mapping_Nested_Members_Using_Dynamic()
6685
Assert.That( customers.Count() == 5 );
6786
Assert.That( customers.First().Orders.Count == 1 );
6887
}
88+
89+
[Test]
90+
public void Nested_Member_Should_Be_Null_If_All_Values_Are_Null()
91+
{
92+
// Arrange
93+
dynamic customer = new ExpandoObject();
94+
customer.Id = 1;
95+
customer.FirstName = "FirstName";
96+
customer.LastName = "LastName";
97+
customer.Order_Id = null;
98+
customer.Order_OrderTotal = null;
99+
100+
// Act
101+
var test = Slapper.AutoMapper.MapDynamic<CustomerSingleOrder>(customer);
102+
103+
// Assert
104+
Assert.That(test != null);
105+
Assert.That(test.Order == null);
106+
}
107+
108+
[Test]
109+
public void Nested_Member_Should_Be_Null_Only_If_All_Nested_Values_Are_Null()
110+
{
111+
// Arrange
112+
dynamic customer = new ExpandoObject();
113+
customer.Id = 1;
114+
customer.FirstName = "FirstName";
115+
customer.LastName = "LastName";
116+
customer.Order_Id = null;
117+
customer.Order_OrderTotal = null;
118+
customer.Order_Details_Address = "123 Fake Ave.";
119+
120+
// Act
121+
var test = Slapper.AutoMapper.MapDynamic<CustomerSingleOrder>(customer);
122+
123+
// Assert
124+
Assert.That(test != null);
125+
Assert.That(test.Order != null);
126+
Assert.That(test.Order.Details != null);
127+
Assert.That(!string.IsNullOrWhiteSpace(test.Order.Details.Address));
128+
Assert.That(test.Order.Details.Address == "123 Fake Ave.");
129+
}
69130
}
70131
}

Slapper.AutoMapper/Slapper.AutoMapper.InternalHelpers.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,14 @@ internal static object Map(IDictionary<string, object> dictionary, object instan
490490
}
491491
else
492492
{
493-
nestedInstance = Map(newDictionary, nestedInstance, instance);
493+
if (newDictionary.Values.All(v => v == null))
494+
{
495+
nestedInstance = null;
496+
}
497+
else
498+
{
499+
nestedInstance = Map(newDictionary, nestedInstance, instance);
500+
}
494501
}
495502

496503
SetMemberValue(member, instance, nestedInstance);

0 commit comments

Comments
 (0)