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.

88 lines
4.1 KiB

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