Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

AuthenticationHandlerTests.cs 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.Interfaces;
  3. using Diligent.WebAPI.Data.Entities;
  4. using Diligent.WebAPI.Host.DTOs.Customer;
  5. using Diligent.WebAPI.Host.Mapper;
  6. using Diligent.WebAPI.Host.Mediator.Authentication.Commands;
  7. using Diligent.WebAPI.Host.Mediator.Authentication.Handlers;
  8. using Diligent.WebAPI.Host.Mediator.Authentication.Queries;
  9. using Microsoft.AspNetCore.Http;
  10. using Microsoft.AspNetCore.Identity;
  11. using Moq;
  12. namespace Tests
  13. {
  14. [TestFixture]
  15. public class AuthenticationHandlerTests
  16. {
  17. private Mock<IAuthenticationService> _authenticationServiceMock;
  18. private IMapper _mapper;
  19. private Mock<ICustomerRepository> _customerServiceMock;
  20. private Mock<UserManager<Customer>> _userManagerMock;
  21. private readonly Customer _customer = new()
  22. {
  23. Id = Guid.NewGuid(),
  24. Email = "user@gmail.com",
  25. FirstName = "User",
  26. LastName = "User",
  27. Notifications = new List<Notification>(),
  28. Roles = new List<Guid> { Guid.NewGuid() },
  29. UserName = "user12"
  30. };
  31. private readonly CustomerCreateDTO _customerCreateDTO = new()
  32. {
  33. Email = "user@gmail.com",
  34. FirstName = "User",
  35. LastName = "User",
  36. Username = "user12"
  37. };
  38. [SetUp]
  39. public void Setup()
  40. {
  41. _authenticationServiceMock = new Mock<IAuthenticationService>();
  42. _customerServiceMock = new Mock<ICustomerRepository>();
  43. _userManagerMock = new Mock<UserManager<Customer>>(Mock.Of<IUserStore<Customer>>(), null, null, null, null, null, null, null, null);
  44. var configuration = new MapperConfiguration(cfg => cfg.AddProfile(new CustomerMappingProfile()));
  45. _mapper = new Mapper(configuration);
  46. }
  47. [Test]
  48. public void LoginUser_UserIsNotAuthenticated_ThrowBadHttpRequestException()
  49. {
  50. _authenticationServiceMock.Setup(a => a.ValidateCustomer(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult(false));
  51. var query = new LoginUserQuery(new CustomerLoginDTO { Username = "user1", Password = "somePassword" });
  52. var handler = new LoginUserHandler(_userManagerMock.Object, _authenticationServiceMock.Object, _mapper, _customerServiceMock.Object);
  53. Assert.That(async () => await handler.Handle(query, new CancellationToken()), Throws.Exception.TypeOf<BadHttpRequestException>());
  54. }
  55. [Test]
  56. public async Task LoginUser_UserIsAuthenticated_ReturnUserObject()
  57. {
  58. var list = new List<string> { "Customer" };
  59. _authenticationServiceMock.Setup(a => a.ValidateCustomer(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult(true));
  60. _authenticationServiceMock.Setup(a => a.GenerateToken()).Returns(Task.FromResult("someToken"));
  61. _customerServiceMock.Setup(c => c.GetCustomer(It.IsAny<string>())).Returns(Task.FromResult(_customer));
  62. _userManagerMock.Setup(u => u.GetRolesAsync(It.IsAny<Customer>())).Returns(Task.FromResult((IList<string>)list));
  63. var query = new LoginUserQuery(new CustomerLoginDTO { Username = "user1", Password = "somePassword" });
  64. var handler = new LoginUserHandler(_userManagerMock.Object, _authenticationServiceMock.Object, _mapper, _customerServiceMock.Object);
  65. var result = await handler.Handle(query, new CancellationToken());
  66. Assert.That(result.Id, Is.EqualTo(_customer.Id.ToString()));
  67. }
  68. [Test]
  69. public void RegisterUser_ErrorWhenCreatingUser_ThrowBadHttpRequestException()
  70. {
  71. _userManagerMock.Setup(u => u.CreateAsync(It.IsAny<Customer>(), It.IsAny<string>())).ReturnsAsync(() => IdentityResult.Failed());
  72. var command = new RegisterUserCommand(_customerCreateDTO);
  73. var handler = new RegisterUserHandler(_userManagerMock.Object, _authenticationServiceMock.Object, _mapper);
  74. Assert.That(() => handler.Handle(command, new CancellationToken()), Throws.Exception.TypeOf<BadHttpRequestException>());
  75. }
  76. [Test]
  77. public async Task RegisterUser_ThereIsNoError_ReturnObject()
  78. {
  79. _userManagerMock.Setup(u => u.CreateAsync(It.IsAny<Customer>(), It.IsAny<string>())).ReturnsAsync(() => IdentityResult.Success);
  80. _userManagerMock.Setup(u => u.AddToRoleAsync(It.IsAny<Customer>(), It.IsAny<string>())).ReturnsAsync(() => IdentityResult.Success);
  81. _authenticationServiceMock.Setup(u => u.ValidateCustomer(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult(true));
  82. _authenticationServiceMock.Setup(u => u.GenerateToken()).Returns(Task.FromResult("dasdada"));
  83. _userManagerMock.Setup(u => u.GetRolesAsync(It.IsAny<Customer>())).Returns(Task.FromResult((IList<string>)new List<string> { "role" }));
  84. var command = new RegisterUserCommand(_customerCreateDTO);
  85. var handler = new RegisterUserHandler(_userManagerMock.Object, _authenticationServiceMock.Object, _mapper);
  86. var result = await handler.Handle(command, new CancellationToken());
  87. Assert.That(result, Is.Not.Null);
  88. }
  89. }
  90. }