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.

91 lines
4.3 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 IdentifiedCommandHandlerTest
  16. {
  17. private readonly Mock<IRequestManager> _requestManager;
  18. private readonly Mock<IMediator> _mediator;
  19. public IdentifiedCommandHandlerTest()
  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 IdentifiedCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
  36. var cltToken = new System.Threading.CancellationToken();
  37. var result = await handler.Handle(fakeOrderCmd, cltToken);
  38. //Assert
  39. Assert.True(result);
  40. _mediator.Verify(x => x.Send(It.IsAny<IRequest<bool>>(), default(System.Threading.CancellationToken)), Times.Once());
  41. }
  42. [Fact]
  43. public async Task Handler_sends_no_command_when_order_already_exists()
  44. {
  45. // Arrange
  46. var fakeGuid = Guid.NewGuid();
  47. var fakeOrderCmd = new IdentifiedCommand<CreateOrderCommand, bool>(FakeOrderRequest(), fakeGuid);
  48. _requestManager.Setup(x => x.ExistAsync(It.IsAny<Guid>()))
  49. .Returns(Task.FromResult(true));
  50. _mediator.Setup(x => x.Send(It.IsAny<IRequest<bool>>(), default(System.Threading.CancellationToken)))
  51. .Returns(Task.FromResult(true));
  52. //Act
  53. var handler = new IdentifiedCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
  54. var cltToken = new System.Threading.CancellationToken();
  55. var result = await handler.Handle(fakeOrderCmd, cltToken);
  56. //Assert
  57. Assert.False(result);
  58. _mediator.Verify(x => x.Send(It.IsAny<IRequest<bool>>(), default(System.Threading.CancellationToken)), Times.Never());
  59. }
  60. private CreateOrderCommand FakeOrderRequest(Dictionary<string, object> args = null)
  61. {
  62. return new CreateOrderCommand(
  63. new List<BasketItem>(),
  64. userId: args != null && args.ContainsKey("userId") ? (string)args["userId"] : null,
  65. userName: args != null && args.ContainsKey("userName") ? (string)args["userName"] : null,
  66. city: args != null && args.ContainsKey("city") ? (string)args["city"] : null,
  67. street: args != null && args.ContainsKey("street") ? (string)args["street"] : null,
  68. state: args != null && args.ContainsKey("state") ? (string)args["state"] : null,
  69. country: args != null && args.ContainsKey("country") ? (string)args["country"] : null,
  70. zipcode: args != null && args.ContainsKey("zipcode") ? (string)args["zipcode"] : null,
  71. cardNumber: args != null && args.ContainsKey("cardNumber") ? (string)args["cardNumber"] : "1234",
  72. cardExpiration: args != null && args.ContainsKey("cardExpiration") ? (DateTime)args["cardExpiration"] : DateTime.MinValue,
  73. cardSecurityNumber: args != null && args.ContainsKey("cardSecurityNumber") ? (string)args["cardSecurityNumber"] : "123",
  74. cardHolderName: args != null && args.ContainsKey("cardHolderName") ? (string)args["cardHolderName"] : "XXX",
  75. cardTypeId: args != null && args.ContainsKey("cardTypeId") ? (int)args["cardTypeId"] : 0);
  76. }
  77. }
  78. }