using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate;
|
|
using Ordering.Domain.Events;
|
|
using Ordering.Domain.Exceptions;
|
|
using System;
|
|
using Xunit;
|
|
|
|
public class OrderAggregateTest
|
|
{
|
|
public OrderAggregateTest()
|
|
{ }
|
|
|
|
[Fact]
|
|
public void Create_order_item_success()
|
|
{
|
|
//Arrange
|
|
var productId = 1;
|
|
var productName = "FakeProductName";
|
|
var unitPrice = 12;
|
|
var discount = 15;
|
|
var pictureUrl = "FakeUrl";
|
|
var units = 5;
|
|
|
|
//Act
|
|
var fakeOrderItem = new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units);
|
|
|
|
//Assert
|
|
Assert.NotNull(fakeOrderItem);
|
|
}
|
|
|
|
[Fact]
|
|
public void Invalid_number_of_units()
|
|
{
|
|
//Arrange
|
|
var productId = 1;
|
|
var productName = "FakeProductName";
|
|
var unitPrice = 12;
|
|
var discount = 15;
|
|
var pictureUrl = "FakeUrl";
|
|
var units = -1;
|
|
|
|
//Act - Assert
|
|
Assert.Throws<OrderingDomainException>(() => new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units));
|
|
}
|
|
|
|
[Fact]
|
|
public void Invalid_total_of_order_item_lower_than_discount_applied()
|
|
{
|
|
//Arrange
|
|
var productId = 1;
|
|
var productName = "FakeProductName";
|
|
var unitPrice = 12;
|
|
var discount = 15;
|
|
var pictureUrl = "FakeUrl";
|
|
var units = 1;
|
|
|
|
//Act - Assert
|
|
Assert.Throws<OrderingDomainException>(() => new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units));
|
|
}
|
|
|
|
[Fact]
|
|
public void Invalid_discount_setting()
|
|
{
|
|
//Arrange
|
|
var productId = 1;
|
|
var productName = "FakeProductName";
|
|
var unitPrice = 12;
|
|
var discount = 15;
|
|
var pictureUrl = "FakeUrl";
|
|
var units = 5;
|
|
|
|
//Act
|
|
var fakeOrderItem = new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units);
|
|
|
|
//Assert
|
|
Assert.Throws<OrderingDomainException>(() => fakeOrderItem.SetNewDiscount(-1));
|
|
}
|
|
|
|
[Fact]
|
|
public void Invalid_units_setting()
|
|
{
|
|
//Arrange
|
|
var productId = 1;
|
|
var productName = "FakeProductName";
|
|
var unitPrice = 12;
|
|
var discount = 15;
|
|
var pictureUrl = "FakeUrl";
|
|
var units = 5;
|
|
|
|
//Act
|
|
var fakeOrderItem = new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units);
|
|
|
|
//Assert
|
|
Assert.Throws<OrderingDomainException>(() => fakeOrderItem.AddUnits(-1));
|
|
}
|
|
|
|
[Fact]
|
|
public void Add_new_Order_raises_new_event()
|
|
{
|
|
//Arrange
|
|
var street = "fakeStreet";
|
|
var city = "FakeCity";
|
|
var state = "fakeState";
|
|
var country = "fakeCountry";
|
|
var zipcode = "FakeZipCode";
|
|
var cardTypeId = 5;
|
|
var cardNumber = "12";
|
|
var cardSecurityNumber = "123";
|
|
var cardHolderName = "FakeName";
|
|
var cardExpiration = DateTime.Now.AddYears(1);
|
|
var expectedResult = 1;
|
|
|
|
//Act
|
|
var fakeOrder = new Order(new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
|
|
|
|
//Assert
|
|
Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
|
|
}
|
|
|
|
[Fact]
|
|
public void Add_event_Order_explicitly_raises_new_event()
|
|
{
|
|
//Arrange
|
|
var street = "fakeStreet";
|
|
var city = "FakeCity";
|
|
var state = "fakeState";
|
|
var country = "fakeCountry";
|
|
var zipcode = "FakeZipCode";
|
|
var cardTypeId = 5;
|
|
var cardNumber = "12";
|
|
var cardSecurityNumber = "123";
|
|
var cardHolderName = "FakeName";
|
|
var cardExpiration = DateTime.Now.AddYears(1);
|
|
var expectedResult = 2;
|
|
|
|
//Act
|
|
var fakeOrder = new Order(new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
|
|
fakeOrder.AddDomainEvent(new OrderStartedDomainEvent(fakeOrder,cardTypeId,cardNumber,cardSecurityNumber,cardHolderName,cardExpiration));
|
|
//Assert
|
|
Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
|
|
}
|
|
|
|
[Fact]
|
|
public void Remove_event_Order_explicitly()
|
|
{
|
|
//Arrange
|
|
var street = "fakeStreet";
|
|
var city = "FakeCity";
|
|
var state = "fakeState";
|
|
var country = "fakeCountry";
|
|
var zipcode = "FakeZipCode";
|
|
var cardTypeId = 5;
|
|
var cardNumber = "12";
|
|
var cardSecurityNumber = "123";
|
|
var cardHolderName = "FakeName";
|
|
var cardExpiration = DateTime.Now.AddYears(1);
|
|
var fakeOrder = new Order(new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
|
|
var @fakeEvent = new OrderStartedDomainEvent(fakeOrder, cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
|
|
var expectedResult = 1;
|
|
|
|
//Act
|
|
fakeOrder.AddDomainEvent(@fakeEvent);
|
|
fakeOrder.RemoveDomainEvent(@fakeEvent);
|
|
//Assert
|
|
Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
|
|
}
|
|
}
|