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.

87 lines
3.9 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace UnitTest.Ordering.Application
  5. {
  6. using MediatR;
  7. using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands;
  8. using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure.Idempotency;
  9. using Moq;
  10. using System.Collections;
  11. using System.Collections.Generic;
  12. using System.Threading.Tasks;
  13. using Xunit;
  14. public class IdentifierCommandHandlerTest
  15. {
  16. private readonly Mock<IRequestManager> _requestManager;
  17. private readonly Mock<IMediator> _mediator;
  18. public IdentifierCommandHandlerTest()
  19. {
  20. _requestManager = new Mock<IRequestManager>();
  21. _mediator = new Mock<IMediator>();
  22. }
  23. [Fact]
  24. public async Task Handler_sends_command_when_order_no_exists()
  25. {
  26. // Arrange
  27. var fakeGuid = Guid.NewGuid();
  28. var fakeOrderCmd = new IdentifiedCommand<CreateOrderCommand, bool>(FakeOrderRequest(), fakeGuid);
  29. _requestManager.Setup(x => x.ExistAsync(It.IsAny<Guid>()))
  30. .Returns(Task.FromResult(false));
  31. _mediator.Setup(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>()))
  32. .Returns(Task.FromResult(true));
  33. //Act
  34. var handler = new IdentifierCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
  35. var result = await handler.Handle(fakeOrderCmd);
  36. //Assert
  37. Assert.True(result);
  38. _mediator.Verify(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>()), Times.Once());
  39. }
  40. [Fact]
  41. public async Task Handler_sends_no_command_when_order_already_exists()
  42. {
  43. // Arrange
  44. var fakeGuid = Guid.NewGuid();
  45. var fakeOrderCmd = new IdentifiedCommand<CreateOrderCommand, bool>(FakeOrderRequest(), fakeGuid);
  46. _requestManager.Setup(x => x.ExistAsync(It.IsAny<Guid>()))
  47. .Returns(Task.FromResult(true));
  48. _mediator.Setup(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>()))
  49. .Returns(Task.FromResult(true));
  50. //Act
  51. var handler = new IdentifierCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
  52. var result = await handler.Handle(fakeOrderCmd);
  53. //Assert
  54. Assert.False(result);
  55. _mediator.Verify(x => x.SendAsync(It.IsAny<IAsyncRequest<bool>>()), Times.Never());
  56. }
  57. private CreateOrderCommand FakeOrderRequest(Dictionary<string, object> args = null)
  58. {
  59. return new CreateOrderCommand(
  60. city: args != null && args.ContainsKey("city") ? (string)args["city"] : null,
  61. street: args != null && args.ContainsKey("street") ? (string)args["street"] : null,
  62. state: args != null && args.ContainsKey("state") ? (string)args["state"] : null,
  63. country: args != null && args.ContainsKey("country") ? (string)args["country"] : null,
  64. zipcode: args != null && args.ContainsKey("zipcode") ? (string)args["zipcode"] : null,
  65. cardNumber: args != null && args.ContainsKey("cardNumber") ? (string)args["cardNumber"] : "1234",
  66. cardExpiration: args != null && args.ContainsKey("cardExpiration") ? (DateTime)args["cardExpiration"] : DateTime.MinValue,
  67. cardSecurityNumber: args != null && args.ContainsKey("cardSecurityNumber") ? (string)args["cardSecurityNumber"] : "123",
  68. cardHolderName: args != null && args.ContainsKey("cardHolderName") ? (string)args["cardHolderName"] : "XXX",
  69. cardTypeId: args != null && args.ContainsKey("cardTypeId") ? (int)args["cardTypeId"] : 0,
  70. paymentId: args != null && args.ContainsKey("paymentId") ? (int)args["paymentId"] : 0,
  71. buyerId: args != null && args.ContainsKey("buyerId") ? (int)args["buyerId"] : 0);
  72. }
  73. }
  74. }