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