Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

UserServiceTests.cs 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.MappingProfiles;
  3. using Diligent.WebAPI.Business.Services;
  4. using Diligent.WebAPI.Business.Settings;
  5. using Diligent.WebAPI.Contracts.DTOs;
  6. using Diligent.WebAPI.Contracts.DTOs.User;
  7. using Diligent.WebAPI.Contracts.Exceptions;
  8. using Diligent.WebAPI.Data;
  9. using Diligent.WebAPI.Data.Entities;
  10. using Microsoft.AspNetCore.Identity;
  11. using Microsoft.EntityFrameworkCore;
  12. using Microsoft.Extensions.Logging;
  13. using Microsoft.Extensions.Options;
  14. using NSubstitute;
  15. namespace Diligent.WebAPI.Tests.Services
  16. {
  17. public class UserServiceTests
  18. {
  19. private readonly List<User> _users;
  20. private readonly User _user;
  21. private readonly IMapper _mapper;
  22. private readonly IUserStore<User> _mockStore;
  23. private readonly UserManager<User> _mockUserManager;
  24. private readonly ILogger<UserService> _logger;
  25. public UserServiceTests()
  26. {
  27. _mockStore = Substitute.For<IUserStore<User>>();
  28. _mockUserManager = Substitute.For<UserManager<User>>(_mockStore, null, null, null, null, null, null, null, null);
  29. _logger = Substitute.For<ILogger<UserService>>();
  30. _user = new User
  31. {
  32. Id = 1,
  33. PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
  34. FirstName = "Dzenis",
  35. LastName = "Dzenis",
  36. UserName = "dzenis",
  37. NormalizedUserName = "DZENIS",
  38. Email = "dzenis@dilig.net",
  39. NormalizedEmail = "DZENIS@DILIG.NET",
  40. EmailConfirmed = false,
  41. IsEnabled = true,
  42. AccessFailedCount = 0,
  43. SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  44. ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  45. };
  46. _users = new List<User>
  47. {
  48. _user
  49. };
  50. // configure mapper
  51. var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(
  52. new List<Profile>
  53. {
  54. new UserMappingProfile()
  55. }));
  56. _mapper = new Mapper(configuration);
  57. }
  58. [Fact]
  59. public async Task GetById_ShouldReturnUser()
  60. {
  61. _mockUserManager.FindByIdAsync(Arg.Any<string>()).Returns(_user);
  62. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  63. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  64. var mailer = Substitute.For<IEmailer>();
  65. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  66. var result = await service.GetById(1);
  67. result.Should().Be(_user);
  68. }
  69. [Fact]
  70. public async Task GetByEmail_ShouldReturnUser()
  71. {
  72. _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_user);
  73. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  74. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  75. var mailer = Substitute.For<IEmailer>();
  76. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  77. var result = await service.GetByEmail("mail");
  78. result.Should().Be(_user);
  79. }
  80. [Fact]
  81. public async Task RemoveUser_ShouldReturnError()
  82. {
  83. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  84. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  85. var mailer = Substitute.For<IEmailer>();
  86. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  87. await service.RemoveUser(_user);
  88. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.GetById(2));
  89. }
  90. [Fact]
  91. public async Task ToggleEnable_ShouldDisableUser()
  92. {
  93. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  94. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  95. var mailer = Substitute.For<IEmailer>();
  96. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  97. var result = await service.ToggleEnable(_user);
  98. Assert.Equal(false, result);
  99. }
  100. [Fact]
  101. public async Task Invite_ShouldFailIfUserExists()
  102. {
  103. _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_user);
  104. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  105. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  106. var mailer = Substitute.For<IEmailer>();
  107. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  108. var result = await service.SendRegistrationLink(new Contracts.DTOs.User.InviteDTO
  109. {
  110. Email = "string",
  111. FirstName = "string",
  112. LastName = "string",
  113. });
  114. Assert.Equal(true, result.IsError);
  115. }
  116. }
  117. }