You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
5.7 KiB

7 years ago
7 years ago
  1. using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate;
  2. using Ordering.Domain.Events;
  3. using Ordering.Domain.Exceptions;
  4. using System;
  5. using System.Linq;
  6. using UnitTest.Ordering;
  7. using Xunit;
  8. public class OrderAggregateTest
  9. {
  10. public OrderAggregateTest()
  11. { }
  12. [Fact]
  13. public void Create_order_item_success()
  14. {
  15. //Arrange
  16. var productId = 1;
  17. var productName = "FakeProductName";
  18. var unitPrice = 12;
  19. var discount = 15;
  20. var pictureUrl = "FakeUrl";
  21. var units = 5;
  22. //Act
  23. var fakeOrderItem = new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units);
  24. //Assert
  25. Assert.NotNull(fakeOrderItem);
  26. }
  27. [Fact]
  28. public void Invalid_number_of_units()
  29. {
  30. //Arrange
  31. var productId = 1;
  32. var productName = "FakeProductName";
  33. var unitPrice = 12;
  34. var discount = 15;
  35. var pictureUrl = "FakeUrl";
  36. var units = -1;
  37. //Act - Assert
  38. Assert.Throws<OrderingDomainException>(() => new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units));
  39. }
  40. [Fact]
  41. public void Invalid_total_of_order_item_lower_than_discount_applied()
  42. {
  43. //Arrange
  44. var productId = 1;
  45. var productName = "FakeProductName";
  46. var unitPrice = 12;
  47. var discount = 15;
  48. var pictureUrl = "FakeUrl";
  49. var units = 1;
  50. //Act - Assert
  51. Assert.Throws<OrderingDomainException>(() => new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units));
  52. }
  53. [Fact]
  54. public void Invalid_discount_setting()
  55. {
  56. //Arrange
  57. var productId = 1;
  58. var productName = "FakeProductName";
  59. var unitPrice = 12;
  60. var discount = 15;
  61. var pictureUrl = "FakeUrl";
  62. var units = 5;
  63. //Act
  64. var fakeOrderItem = new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units);
  65. //Assert
  66. Assert.Throws<OrderingDomainException>(() => fakeOrderItem.SetNewDiscount(-1));
  67. }
  68. [Fact]
  69. public void Invalid_units_setting()
  70. {
  71. //Arrange
  72. var productId = 1;
  73. var productName = "FakeProductName";
  74. var unitPrice = 12;
  75. var discount = 15;
  76. var pictureUrl = "FakeUrl";
  77. var units = 5;
  78. //Act
  79. var fakeOrderItem = new OrderItem(productId, productName, unitPrice, discount, pictureUrl, units);
  80. //Assert
  81. Assert.Throws<OrderingDomainException>(() => fakeOrderItem.AddUnits(-1));
  82. }
  83. [Fact]
  84. public void when_add_two_times_on_the_same_item_then_the_total_of_order_should_be_the_sum_of_the_two_items()
  85. {
  86. var address = new AddressBuilder().Build();
  87. var order = new OrderBuilder(address)
  88. .AddOne(1,"cup",10.0m,0,string.Empty)
  89. .AddOne(1,"cup",10.0m,0,string.Empty)
  90. .Build();
  91. Assert.Equal(20.0m, order.GetTotal());
  92. }
  93. [Fact]
  94. public void Add_new_Order_raises_new_event()
  95. {
  96. //Arrange
  97. var street = "fakeStreet";
  98. var city = "FakeCity";
  99. var state = "fakeState";
  100. var country = "fakeCountry";
  101. var zipcode = "FakeZipCode";
  102. var cardTypeId = 5;
  103. var cardNumber = "12";
  104. var cardSecurityNumber = "123";
  105. var cardHolderName = "FakeName";
  106. var cardExpiration = DateTime.Now.AddYears(1);
  107. var expectedResult = 1;
  108. //Act
  109. var fakeOrder = new Order("1", "fakeName", new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  110. //Assert
  111. Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
  112. }
  113. [Fact]
  114. public void Add_event_Order_explicitly_raises_new_event()
  115. {
  116. //Arrange
  117. var street = "fakeStreet";
  118. var city = "FakeCity";
  119. var state = "fakeState";
  120. var country = "fakeCountry";
  121. var zipcode = "FakeZipCode";
  122. var cardTypeId = 5;
  123. var cardNumber = "12";
  124. var cardSecurityNumber = "123";
  125. var cardHolderName = "FakeName";
  126. var cardExpiration = DateTime.Now.AddYears(1);
  127. var expectedResult = 2;
  128. //Act
  129. var fakeOrder = new Order("1", "fakeName", new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  130. fakeOrder.AddDomainEvent(new OrderStartedDomainEvent(fakeOrder, "fakeName", "1", cardTypeId,cardNumber,cardSecurityNumber,cardHolderName,cardExpiration));
  131. //Assert
  132. Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
  133. }
  134. [Fact]
  135. public void Remove_event_Order_explicitly()
  136. {
  137. //Arrange
  138. var street = "fakeStreet";
  139. var city = "FakeCity";
  140. var state = "fakeState";
  141. var country = "fakeCountry";
  142. var zipcode = "FakeZipCode";
  143. var cardTypeId = 5;
  144. var cardNumber = "12";
  145. var cardSecurityNumber = "123";
  146. var cardHolderName = "FakeName";
  147. var cardExpiration = DateTime.Now.AddYears(1);
  148. var fakeOrder = new Order("1", "fakeName", new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  149. var @fakeEvent = new OrderStartedDomainEvent(fakeOrder, "1", "fakeName", cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  150. var expectedResult = 1;
  151. //Act
  152. fakeOrder.AddDomainEvent(@fakeEvent);
  153. fakeOrder.RemoveDomainEvent(@fakeEvent);
  154. //Assert
  155. Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
  156. }
  157. }