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.

92 lines
3.3 KiB

  1. using MediatR;
  2. using Microsoft.eShopOnContainers.Services.Ordering.Api.Application.Commands;
  3. using Microsoft.eShopOnContainers.Services.Ordering.Domain;
  4. using Microsoft.eShopOnContainers.Services.Ordering.Domain.Repositories;
  5. using Microsoft.eShopOnContainers.Services.Ordering.Domain.SeedWork;
  6. using Moq;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using Xunit;
  13. namespace UnitTest.Ordering.Application
  14. {
  15. public class NewOrderRequestHandlerTest
  16. {
  17. private readonly Mock<IBuyerRepository> _buyerRepositoryMock;
  18. private readonly Mock<IOrderRepository> _orderRepositoryMock;
  19. public NewOrderRequestHandlerTest()
  20. {
  21. //Mocks;
  22. _buyerRepositoryMock = new Mock<IBuyerRepository>();
  23. _orderRepositoryMock = new Mock<IOrderRepository>();
  24. }
  25. [Fact]
  26. public async Task Handle_ReturnsTrue_WhenOrderIsPersistedSuccesfully()
  27. {
  28. // Arrange
  29. _buyerRepositoryMock.Setup(buyerRepo => buyerRepo.FindAsync(FakeOrderRequestWithBuyer().Buyer))
  30. .Returns(Task.FromResult<Buyer>(FakeBuyer()));
  31. _buyerRepositoryMock.Setup(buyerRepo => buyerRepo.UnitOfWork.SaveChangesAsync(default(CancellationToken)))
  32. .Returns(Task.FromResult(1));
  33. _orderRepositoryMock.Setup(or => or.Add(FakeOrder())).Returns(FakeOrder());
  34. _orderRepositoryMock.Setup(or => or.UnitOfWork.SaveChangesAsync(default(CancellationToken))).Returns(Task.FromResult(1));
  35. //Act
  36. var handler = new NewOrderRequestHandler(_buyerRepositoryMock.Object, _orderRepositoryMock.Object);
  37. var result = await handler.Handle(FakeOrderRequestWithBuyer());
  38. //Assert
  39. Assert.True(result);
  40. }
  41. [Fact]
  42. public async Task Handle_ReturnsFalse_WhenOrderIsNotPersisted()
  43. {
  44. _buyerRepositoryMock.Setup(buyerRepo => buyerRepo.FindAsync(FakeOrderRequestWithBuyer().Buyer))
  45. .Returns(Task.FromResult<Buyer>(FakeBuyer()));
  46. _buyerRepositoryMock.Setup(buyerRepo => buyerRepo.UnitOfWork.SaveChangesAsync(default(CancellationToken)))
  47. .Returns(Task.FromResult(1));
  48. _orderRepositoryMock.Setup(or => or.Add(FakeOrder())).Returns(FakeOrder());
  49. _orderRepositoryMock.Setup(or => or.UnitOfWork.SaveChangesAsync(default(CancellationToken))).Returns(Task.FromResult(0));
  50. //Act
  51. var handler = new NewOrderRequestHandler(_buyerRepositoryMock.Object, _orderRepositoryMock.Object);
  52. var result = await handler.Handle(FakeOrderRequestWithBuyer());
  53. //Assert
  54. Assert.False(result);
  55. }
  56. private Buyer FakeBuyer()
  57. {
  58. return new Buyer(Guid.NewGuid().ToString());
  59. }
  60. private Order FakeOrder()
  61. {
  62. return new Order(1, 1)
  63. {
  64. };
  65. }
  66. private NewOrderRequest FakeOrderRequestWithBuyer()
  67. {
  68. return new NewOrderRequest
  69. {
  70. Buyer = "1234",
  71. CardNumber = "1234",
  72. CardExpiration = DateTime.Now.AddYears(1),
  73. CardSecurityNumber = "123",
  74. CardHolderName = "XXX"
  75. };
  76. }
  77. }
  78. }