From 3d552b3219edf981f7ba0ffdcf504749e2877698 Mon Sep 17 00:00:00 2001 From: "PLAINCONCEPTS\\lruiz" Date: Tue, 22 Aug 2017 12:04:40 +0200 Subject: [PATCH] Fix bug #263 --- .../AggregatesModel/OrderAggregate/Order.cs | 8 +++- .../OrderAggregate/OrderItem.cs | 5 ++ test/Services/UnitTest/Ordering/Builders.cs | 47 +++++++++++++++++++ .../Ordering/Domain/OrderAggregateTest.cs | 14 ++++++ 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 test/Services/UnitTest/Ordering/Builders.cs diff --git a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs index 37c17c897..ae2194948 100644 --- a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs +++ b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs @@ -72,8 +72,9 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O if (discount > existingOrderForProduct.GetCurrentDiscount()) { existingOrderForProduct.SetNewDiscount(discount); - existingOrderForProduct.AddUnits(units); } + + existingOrderForProduct.AddUnits(units); } else { @@ -187,6 +188,11 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O { throw new OrderingDomainException($"Not possible to change order status from {OrderStatus.Name} to {orderStatusToChange.Name}."); } + + public decimal GetTotal() + { + return _orderItems.Sum(o => o.GetUnits() * o.GetUnitPrice()); + } } } diff --git a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs index fd65fb3ca..1b7896dcc 100644 --- a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs +++ b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs @@ -59,6 +59,11 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O return _units; } + public decimal GetUnitPrice() + { + return _unitPrice; + } + public string GetOrderItemProductName() => _productName; public void SetNewDiscount(decimal discount) diff --git a/test/Services/UnitTest/Ordering/Builders.cs b/test/Services/UnitTest/Ordering/Builders.cs new file mode 100644 index 000000000..c9dd9d366 --- /dev/null +++ b/test/Services/UnitTest/Ordering/Builders.cs @@ -0,0 +1,47 @@ +using System; +using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate; + +namespace UnitTest.Ordering +{ + public class AddressBuilder + { + public Address Build() + { + return new Address("street", "city", "state", "country", "zipcode"); + } + } + + public class OrderBuilder + { + private readonly Order order; + + public OrderBuilder(Address address) + { + order = new Order( + "userId", + address, + cardTypeId:5, + cardNumber:"12", + cardSecurityNumber:"123", + cardHolderName:"name", + cardExpiration:DateTime.UtcNow); + } + + public OrderBuilder AddOne( + int productId, + string productName, + decimal unitPrice, + decimal discount, + string pictureUrl, + int units = 1) + { + order.AddOrderItem(productId, productName, unitPrice, discount, pictureUrl, units); + return this; + } + + public Order Build() + { + return order; + } + } +} diff --git a/test/Services/UnitTest/Ordering/Domain/OrderAggregateTest.cs b/test/Services/UnitTest/Ordering/Domain/OrderAggregateTest.cs index dfa31eb62..eaa0d0cb6 100644 --- a/test/Services/UnitTest/Ordering/Domain/OrderAggregateTest.cs +++ b/test/Services/UnitTest/Ordering/Domain/OrderAggregateTest.cs @@ -2,6 +2,8 @@ using Ordering.Domain.Events; using Ordering.Domain.Exceptions; using System; +using System.Linq; +using UnitTest.Ordering; using Xunit; public class OrderAggregateTest @@ -93,6 +95,18 @@ public class OrderAggregateTest Assert.Throws(() => fakeOrderItem.AddUnits(-1)); } + [Fact] + public void when_add_two_times_on_the_same_item_then_the_total_of_order_should_be_the_sum_of_the_two_items() + { + var address = new AddressBuilder().Build(); + var order = new OrderBuilder(address) + .AddOne(1,"cup",10.0m,0,string.Empty) + .AddOne(1,"cup",10.0m,0,string.Empty) + .Build(); + + Assert.Equal(20.0m, order.GetTotal()); + } + [Fact] public void Add_new_Order_raises_new_event() {