Browse Source

Fix bug #263

pull/281/head
PLAINCONCEPTS\lruiz 7 years ago
parent
commit
3d552b3219
4 changed files with 73 additions and 1 deletions
  1. +7
    -1
      src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs
  2. +5
    -0
      src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs
  3. +47
    -0
      test/Services/UnitTest/Ordering/Builders.cs
  4. +14
    -0
      test/Services/UnitTest/Ordering/Domain/OrderAggregateTest.cs

+ 7
- 1
src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs View File

@ -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());
}
}
}

+ 5
- 0
src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/OrderItem.cs View File

@ -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)


+ 47
- 0
test/Services/UnitTest/Ordering/Builders.cs View File

@ -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;
}
}
}

+ 14
- 0
test/Services/UnitTest/Ordering/Domain/OrderAggregateTest.cs View File

@ -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<OrderingDomainException>(() => 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()
{


Loading…
Cancel
Save