Skip to content

Commit d9fb14c

Browse files
Merge pull request dotnet-architecture#281 from lurumad/dev
Fix bug dotnet-architecture#263
2 parents eb4396e + 3d552b3 commit d9fb14c

4 files changed

Lines changed: 73 additions & 1 deletion

File tree

src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,9 @@ public void AddOrderItem(int productId, string productName, decimal unitPrice, d
7272
if (discount > existingOrderForProduct.GetCurrentDiscount())
7373
{
7474
existingOrderForProduct.SetNewDiscount(discount);
75-
existingOrderForProduct.AddUnits(units);
7675
}
76+
77+
existingOrderForProduct.AddUnits(units);
7778
}
7879
else
7980
{
@@ -187,6 +188,11 @@ private void StatusChangeException(OrderStatus orderStatusToChange)
187188
{
188189
throw new OrderingDomainException($"Not possible to change order status from {OrderStatus.Name} to {orderStatusToChange.Name}.");
189190
}
191+
192+
public decimal GetTotal()
193+
{
194+
return _orderItems.Sum(o => o.GetUnits() * o.GetUnitPrice());
195+
}
190196
}
191197
}
192198

src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ public int GetUnits()
5959
return _units;
6060
}
6161

62+
public decimal GetUnitPrice()
63+
{
64+
return _unitPrice;
65+
}
66+
6267
public string GetOrderItemProductName() => _productName;
6368

6469
public void SetNewDiscount(decimal discount)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using System;
2+
using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate;
3+
4+
namespace UnitTest.Ordering
5+
{
6+
public class AddressBuilder
7+
{
8+
public Address Build()
9+
{
10+
return new Address("street", "city", "state", "country", "zipcode");
11+
}
12+
}
13+
14+
public class OrderBuilder
15+
{
16+
private readonly Order order;
17+
18+
public OrderBuilder(Address address)
19+
{
20+
order = new Order(
21+
"userId",
22+
address,
23+
cardTypeId:5,
24+
cardNumber:"12",
25+
cardSecurityNumber:"123",
26+
cardHolderName:"name",
27+
cardExpiration:DateTime.UtcNow);
28+
}
29+
30+
public OrderBuilder AddOne(
31+
int productId,
32+
string productName,
33+
decimal unitPrice,
34+
decimal discount,
35+
string pictureUrl,
36+
int units = 1)
37+
{
38+
order.AddOrderItem(productId, productName, unitPrice, discount, pictureUrl, units);
39+
return this;
40+
}
41+
42+
public Order Build()
43+
{
44+
return order;
45+
}
46+
}
47+
}

test/Services/UnitTest/Ordering/Domain/OrderAggregateTest.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using Ordering.Domain.Events;
33
using Ordering.Domain.Exceptions;
44
using System;
5+
using System.Linq;
6+
using UnitTest.Ordering;
57
using Xunit;
68

79
public class OrderAggregateTest
@@ -93,6 +95,18 @@ public void Invalid_units_setting()
9395
Assert.Throws<OrderingDomainException>(() => fakeOrderItem.AddUnits(-1));
9496
}
9597

98+
[Fact]
99+
public void when_add_two_times_on_the_same_item_then_the_total_of_order_should_be_the_sum_of_the_two_items()
100+
{
101+
var address = new AddressBuilder().Build();
102+
var order = new OrderBuilder(address)
103+
.AddOne(1,"cup",10.0m,0,string.Empty)
104+
.AddOne(1,"cup",10.0m,0,string.Empty)
105+
.Build();
106+
107+
Assert.Equal(20.0m, order.GetTotal());
108+
}
109+
96110
[Fact]
97111
public void Add_new_Order_raises_new_event()
98112
{

0 commit comments

Comments
 (0)