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.

114 lines
4.8 KiB

  1. using Basket.API.IntegrationEvents.Events;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
  4. using Microsoft.eShopOnContainers.Services.Basket.API.Controllers;
  5. using Microsoft.eShopOnContainers.Services.Basket.API.Model;
  6. using Moq;
  7. using System.Collections.Generic;
  8. using System.Threading.Tasks;
  9. using Xunit;
  10. using IBasketIdentityService = Microsoft.eShopOnContainers.Services.Basket.API.Services.IIdentityService;
  11. namespace UnitTest.Basket.Application
  12. {
  13. public class BasketWebApiTest
  14. {
  15. private readonly Mock<IBasketRepository> _basketRepositoryMock;
  16. private readonly Mock<IBasketIdentityService> _identityServiceMock;
  17. private readonly Mock<IEventBus> _serviceBusMock;
  18. public BasketWebApiTest()
  19. {
  20. _basketRepositoryMock = new Mock<IBasketRepository>();
  21. _identityServiceMock = new Mock<IBasketIdentityService>();
  22. _serviceBusMock = new Mock<IEventBus>();
  23. }
  24. [Fact]
  25. public async Task Get_customer_basket_success()
  26. {
  27. //Arrange
  28. var fakeCustomerId = "1";
  29. var fakeCustomerBasket = GetCustomerBasketFake(fakeCustomerId);
  30. _basketRepositoryMock.Setup(x => x.GetBasketAsync(It.IsAny<string>()))
  31. .Returns(Task.FromResult(fakeCustomerBasket));
  32. _identityServiceMock.Setup(x => x.GetUserIdentity()).Returns(fakeCustomerId);
  33. _serviceBusMock.Setup(x => x.Publish(It.IsAny<UserCheckoutAccepted>()));
  34. //Act
  35. var basketController = new BasketController(
  36. _basketRepositoryMock.Object, _identityServiceMock.Object, _serviceBusMock.Object);
  37. var actionResult = await basketController.Get(fakeCustomerId) as OkObjectResult;
  38. //Assert
  39. Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK);
  40. Assert.Equal(((CustomerBasket)actionResult.Value).BuyerId, fakeCustomerId);
  41. }
  42. [Fact]
  43. public async Task Post_customer_basket_success()
  44. {
  45. //Arrange
  46. var fakeCustomerId = "1";
  47. var fakeCustomerBasket = GetCustomerBasketFake(fakeCustomerId);
  48. _basketRepositoryMock.Setup(x => x.UpdateBasketAsync(It.IsAny<CustomerBasket>()))
  49. .Returns(Task.FromResult(fakeCustomerBasket));
  50. _identityServiceMock.Setup(x => x.GetUserIdentity()).Returns(fakeCustomerId);
  51. _serviceBusMock.Setup(x => x.Publish(It.IsAny<UserCheckoutAccepted>()));
  52. //Act
  53. var basketController = new BasketController(
  54. _basketRepositoryMock.Object, _identityServiceMock.Object, _serviceBusMock.Object);
  55. var actionResult = await basketController.Post(fakeCustomerBasket) as OkObjectResult;
  56. //Assert
  57. Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.OK);
  58. Assert.Equal(((CustomerBasket)actionResult.Value).BuyerId, fakeCustomerId);
  59. }
  60. [Fact]
  61. public async Task Doing_Checkout_Without_Basket_Should_Return_Bad_Request()
  62. {
  63. var fakeCustomerId = "2";
  64. _basketRepositoryMock.Setup(x => x.GetBasketAsync(It.IsAny<string>()))
  65. .Returns(Task.FromResult((CustomerBasket)null));
  66. _identityServiceMock.Setup(x => x.GetUserIdentity()).Returns(fakeCustomerId);
  67. //Act
  68. var basketController = new BasketController(
  69. _basketRepositoryMock.Object, _identityServiceMock.Object, _serviceBusMock.Object);
  70. var result = await basketController.Checkout() as BadRequestResult;
  71. Assert.NotNull(result);
  72. }
  73. [Fact]
  74. public async Task Doing_Checkout_Wit_Basket_Should_Publish_UserCheckoutAccepted_Integration_Event()
  75. {
  76. var fakeCustomerId = "1";
  77. var fakeCustomerBasket = GetCustomerBasketFake(fakeCustomerId);
  78. _basketRepositoryMock.Setup(x => x.GetBasketAsync(It.IsAny<string>()))
  79. .Returns(Task.FromResult(fakeCustomerBasket));
  80. _identityServiceMock.Setup(x => x.GetUserIdentity()).Returns(fakeCustomerId);
  81. //Act
  82. var basketController = new BasketController(
  83. _basketRepositoryMock.Object, _identityServiceMock.Object, _serviceBusMock.Object);
  84. var result = await basketController.Checkout() as AcceptedResult;
  85. _serviceBusMock.Verify(mock => mock.Publish(It.IsAny<UserCheckoutAccepted>()), Times.Once);
  86. Assert.NotNull(result);
  87. }
  88. private CustomerBasket GetCustomerBasketFake(string fakeCustomerId)
  89. {
  90. return new CustomerBasket(fakeCustomerId)
  91. {
  92. Items = new List<BasketItem>()
  93. {
  94. new BasketItem()
  95. }
  96. };
  97. }
  98. }
  99. }