Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

UserServiceTests.cs 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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.Data;
  8. using Diligent.WebAPI.Data.Entities;
  9. using Microsoft.AspNetCore.Identity;
  10. using Microsoft.EntityFrameworkCore;
  11. using Microsoft.Extensions.Logging;
  12. using Microsoft.Extensions.Options;
  13. using NSubstitute;
  14. namespace Diligent.WebAPI.Tests.Services
  15. {
  16. public class UserServiceTests
  17. {
  18. private readonly List<User> _users;
  19. private readonly User _user;
  20. private readonly IMapper _mapper;
  21. private readonly IUserStore<User> _mockStore;
  22. private readonly UserManager<User> _mockUserManager;
  23. private readonly ILogger<UserService> _logger;
  24. public UserServiceTests()
  25. {
  26. _mockStore = Substitute.For<IUserStore<User>>();
  27. _mockUserManager = Substitute.For<UserManager<User>>(_mockStore, null, null, null, null, null, null, null, null);
  28. _logger = Substitute.For<ILogger<UserService>>();
  29. _user = new User
  30. {
  31. Id = 1,
  32. PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
  33. FirstName = "Dzenis",
  34. LastName = "Dzenis",
  35. UserName = "dzenis",
  36. NormalizedUserName = "DZENIS",
  37. Email = "dzenis@dilig.net",
  38. NormalizedEmail = "DZENIS@DILIG.NET",
  39. EmailConfirmed = false,
  40. IsEnabled = true,
  41. AccessFailedCount = 0,
  42. SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  43. ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  44. };
  45. _users = new List<User>
  46. {
  47. _user
  48. };
  49. // configure mapper
  50. var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(
  51. new List<Profile>
  52. {
  53. new UserMappingProfile()
  54. }));
  55. _mapper = new Mapper(configuration);
  56. }
  57. [Fact]
  58. public async Task GetById_ShouldReturnUser()
  59. {
  60. _mockUserManager.FindByIdAsync(Arg.Any<string>()).Returns(_user);
  61. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  62. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  63. var mailer = Substitute.For<IEmailer>();
  64. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  65. var result = await service.GetById(1);
  66. result.Should().Be(_user);
  67. }
  68. [Fact]
  69. public async Task GetByEmail_ShouldReturnUser()
  70. {
  71. _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_user);
  72. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  73. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  74. var mailer = Substitute.For<IEmailer>();
  75. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  76. var result = await service.GetByEmail("mail");
  77. result.Should().Be(_user);
  78. }
  79. [Fact]
  80. public async Task RemoveUser_ShouldDeleteUser()
  81. {
  82. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  83. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  84. var mailer = Substitute.For<IEmailer>();
  85. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
  86. await service.RemoveUser(_user);
  87. var result = await service.GetById(2);
  88. result.Should().Be(null);
  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. //[Fact] To be debuged later
  117. //public async Task Invite_ShouldPassIfUserDoesNotExist()
  118. //{
  119. // _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns<User>(x => null);
  120. // var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  121. // var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  122. // var mailer = Substitute.For<IEmailer>();
  123. // mailer.When(x => x.SendEmailAndWriteToDbAsync(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>(), Arg.Any<bool>())).Do(x => { });
  124. // var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
  125. // var result = await service.SendRegistrationLink(new InviteDTO
  126. // {
  127. // Email = "string@dilig.net",
  128. // FirstName = "string",
  129. // LastName = "string",
  130. // });
  131. // result.Data.Should().BeEquivalentTo(new
  132. // {
  133. // Message = "Link has been sent!"
  134. // });
  135. //}
  136. }
  137. }