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.

95 lines
3.3 KiB

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