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.

165 lines
6.3 KiB

  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.eShopOnContainers.WebMVC.Controllers;
  4. using Microsoft.eShopOnContainers.WebMVC.Services;
  5. using Microsoft.eShopOnContainers.WebMVC.ViewModels;
  6. using Moq;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Threading.Tasks;
  10. using Xunit;
  11. using BasketModel = Microsoft.eShopOnContainers.WebMVC.ViewModels.Basket;
  12. namespace UnitTest.Ordering.Application
  13. {
  14. public class OrderControllerTest
  15. {
  16. private readonly Mock<IOrderingService> _orderServiceMock;
  17. private readonly Mock<IBasketService> _basketServiceMock;
  18. private readonly Mock<IIdentityParser<ApplicationUser>> _identityParserMock;
  19. private readonly Mock<HttpContext> _contextMock;
  20. public OrderControllerTest()
  21. {
  22. _orderServiceMock = new Mock<IOrderingService>();
  23. _basketServiceMock = new Mock<IBasketService>();
  24. _identityParserMock = new Mock<IIdentityParser<ApplicationUser>>();
  25. _contextMock = new Mock<HttpContext>();
  26. }
  27. [Fact]
  28. public async Task Get_order_list_success()
  29. {
  30. //Arrange
  31. var expectedTotalResults = 1;
  32. var fakeOrder = GetFakeOrder();
  33. _orderServiceMock.Setup(x => x.GetMyOrders(It.IsAny<ApplicationUser>()))
  34. .Returns(Task.FromResult(new List<Order>() { fakeOrder }));
  35. //Act
  36. var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object);
  37. orderController.ControllerContext.HttpContext = _contextMock.Object;
  38. var actionResult = await orderController.Index(fakeOrder);
  39. //Assert
  40. var viewResult = Assert.IsType<ViewResult>(actionResult);
  41. var model = Assert.IsAssignableFrom<List<Order>>(viewResult.ViewData.Model);
  42. Assert.Equal(model.Count, expectedTotalResults);
  43. }
  44. [Fact]
  45. public async Task Get_order_detail_success()
  46. {
  47. //Arrange
  48. var fakeOrderId = "12";
  49. var fakeOrder = GetFakeOrder();
  50. _orderServiceMock.Setup(x => x.GetOrder(It.IsAny<ApplicationUser>(), It.IsAny<string>()))
  51. .Returns(Task.FromResult(fakeOrder));
  52. //Act
  53. var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object);
  54. orderController.ControllerContext.HttpContext = _contextMock.Object;
  55. var actionResult = await orderController.Detail(fakeOrderId);
  56. //Assert
  57. var viewResult = Assert.IsType<ViewResult>(actionResult);
  58. Assert.IsAssignableFrom<Order>(viewResult.ViewData.Model);
  59. }
  60. [Fact]
  61. public async Task Get_create_order_success()
  62. {
  63. //Arrange
  64. var fakeBuyerId = "1";
  65. var fakeBasket = GetFakeBasket(fakeBuyerId);
  66. var fakeOrder = GetFakeOrder();
  67. _basketServiceMock.Setup(x => x.GetBasket(It.IsAny<ApplicationUser>()))
  68. .Returns(Task.FromResult(fakeBasket));
  69. _basketServiceMock.Setup(x => x.MapBasketToOrder(It.IsAny<BasketModel>()))
  70. .Returns(fakeOrder);
  71. _orderServiceMock.Setup(x => x.MapUserInfoIntoOrder(It.IsAny<ApplicationUser>(), It.IsAny<Order>()))
  72. .Returns(fakeOrder);
  73. //Act
  74. var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object);
  75. orderController.ControllerContext.HttpContext = _contextMock.Object;
  76. var actionResult = await orderController.Create();
  77. //Assert
  78. var viewResult = Assert.IsType<ViewResult>(actionResult);
  79. Assert.IsAssignableFrom<Order>(viewResult.ViewData.Model);
  80. }
  81. [Fact]
  82. public async Task Post_create_order_success()
  83. {
  84. //Arrange
  85. var fakeOrder = GetFakeOrder();
  86. _basketServiceMock.Setup(x => x.CleanBasket(It.IsAny<ApplicationUser>()))
  87. .Returns(Task.FromResult(1));
  88. _orderServiceMock.Setup(x => x.CreateOrder(It.IsAny<Order>()))
  89. .Returns(Task.FromResult(1));
  90. //Act
  91. var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object);
  92. orderController.ControllerContext.HttpContext = _contextMock.Object;
  93. var actionResult = await orderController.Create(fakeOrder, "fakeAction");
  94. //Assert
  95. var redirectToActionResult = Assert.IsType<RedirectToActionResult>(actionResult);
  96. Assert.Null(redirectToActionResult.ControllerName);
  97. Assert.Equal("Index", redirectToActionResult.ActionName);
  98. }
  99. [Fact]
  100. public async Task Post_create_order_fail()
  101. {
  102. //Arrange
  103. var fakeOrder = GetFakeOrder();
  104. _basketServiceMock.Setup(x => x.CleanBasket(It.IsAny<ApplicationUser>()))
  105. .Returns(Task.FromResult(1));
  106. _orderServiceMock.Setup(x => x.CreateOrder(It.IsAny<Order>()))
  107. .Returns(Task.FromResult(1));
  108. //Act
  109. var orderController = new OrderController(_orderServiceMock.Object, _basketServiceMock.Object, _identityParserMock.Object);
  110. orderController.ControllerContext.HttpContext = _contextMock.Object;
  111. orderController.ModelState.AddModelError("fakeError", "fakeError");
  112. var actionResult = await orderController.Create(fakeOrder, "action");
  113. //Assert
  114. var viewResult = Assert.IsType<ViewResult>(actionResult);
  115. Assert.IsAssignableFrom<Order>(viewResult.ViewData.Model);
  116. }
  117. private BasketModel GetFakeBasket(string buyerId)
  118. {
  119. return new BasketModel()
  120. {
  121. BuyerId = buyerId
  122. };
  123. }
  124. private Order GetFakeOrder()
  125. {
  126. return new Order()
  127. {
  128. OrderNumber = "1",
  129. CardNumber = "12",
  130. CardSecurityNumber = "1212",
  131. Status = "Pending",
  132. RequestId = Guid.NewGuid(),
  133. CardExpiration = DateTime.Now.AddYears(1),
  134. };
  135. }
  136. }
  137. }