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.

116 lines
5.0 KiB

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