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.

182 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 userId = new Guid();
  98. var street = "fakeStreet";
  99. var city = "FakeCity";
  100. var state = "fakeState";
  101. var country = "fakeCountry";
  102. var zipcode = "FakeZipCode";
  103. var cardTypeId = 5;
  104. var cardNumber = "12";
  105. var cardSecurityNumber = "123";
  106. var cardHolderName = "FakeName";
  107. var cardExpiration = DateTime.Now.AddYears(1);
  108. var expectedResult = 1;
  109. //Act
  110. var fakeOrder = new Order("1", new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  111. //Assert
  112. Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
  113. }
  114. [Fact]
  115. public void Add_event_Order_explicitly_raises_new_event()
  116. {
  117. //Arrange
  118. var userId = new Guid();
  119. var street = "fakeStreet";
  120. var city = "FakeCity";
  121. var state = "fakeState";
  122. var country = "fakeCountry";
  123. var zipcode = "FakeZipCode";
  124. var cardTypeId = 5;
  125. var cardNumber = "12";
  126. var cardSecurityNumber = "123";
  127. var cardHolderName = "FakeName";
  128. var cardExpiration = DateTime.Now.AddYears(1);
  129. var expectedResult = 2;
  130. //Act
  131. var fakeOrder = new Order("1", new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  132. fakeOrder.AddDomainEvent(new OrderStartedDomainEvent(fakeOrder, "1", cardTypeId,cardNumber,cardSecurityNumber,cardHolderName,cardExpiration));
  133. //Assert
  134. Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
  135. }
  136. [Fact]
  137. public void Remove_event_Order_explicitly()
  138. {
  139. //Arrange
  140. var userId = new Guid();
  141. var street = "fakeStreet";
  142. var city = "FakeCity";
  143. var state = "fakeState";
  144. var country = "fakeCountry";
  145. var zipcode = "FakeZipCode";
  146. var cardTypeId = 5;
  147. var cardNumber = "12";
  148. var cardSecurityNumber = "123";
  149. var cardHolderName = "FakeName";
  150. var cardExpiration = DateTime.Now.AddYears(1);
  151. var fakeOrder = new Order("1", new Address(street, city, state, country, zipcode), cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  152. var @fakeEvent = new OrderStartedDomainEvent(fakeOrder, "1", cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration);
  153. var expectedResult = 1;
  154. //Act
  155. fakeOrder.AddDomainEvent(@fakeEvent);
  156. fakeOrder.RemoveDomainEvent(@fakeEvent);
  157. //Assert
  158. Assert.Equal(fakeOrder.DomainEvents.Count, expectedResult);
  159. }
  160. }