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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. public UserServiceTests()
  24. {
  25. _mockStore = Substitute.For<IUserStore<User>>();
  26. _mockUserManager = Substitute.For<UserManager<User>>(_mockStore, null, null, null, null, null, null, null, null);
  27. _user = new User
  28. {
  29. Id = 1,
  30. PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
  31. FirstName = "Dzenis",
  32. LastName = "Dzenis",
  33. UserName = "dzenis",
  34. NormalizedUserName = "DZENIS",
  35. Email = "dzenis@dilig.net",
  36. NormalizedEmail = "DZENIS@DILIG.NET",
  37. EmailConfirmed = false,
  38. IsEnabled = true,
  39. AccessFailedCount = 0,
  40. SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  41. ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  42. };
  43. _users = new List<User>
  44. {
  45. _user
  46. };
  47. // configure mapper
  48. var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(
  49. new List<Profile>
  50. {
  51. new UserMappingProfile()
  52. }));
  53. _mapper = new Mapper(configuration);
  54. }
  55. [Fact]
  56. public async Task GetById_ShouldReturnUser()
  57. {
  58. _mockUserManager.FindByIdAsync(Arg.Any<string>()).Returns(_user);
  59. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  60. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  61. var mailer = Substitute.For<IEmailer>();
  62. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
  63. var result = await service.GetById(1);
  64. result.Should().Be(_user);
  65. }
  66. [Fact]
  67. public async Task GetByEmail_ShouldReturnUser()
  68. {
  69. _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_user);
  70. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  71. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  72. var mailer = Substitute.For<IEmailer>();
  73. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
  74. var result = await service.GetByEmail("mail");
  75. result.Should().Be(_user);
  76. }
  77. [Fact]
  78. public async Task RemoveUser_ShouldDeleteUser()
  79. {
  80. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  81. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  82. var mailer = Substitute.For<IEmailer>();
  83. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
  84. await service.RemoveUser(_user);
  85. var result = await service.GetById(2);
  86. result.Should().Be(null);
  87. }
  88. [Fact]
  89. public async Task ToggleEnable_ShouldDisableUser()
  90. {
  91. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  92. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  93. var mailer = Substitute.For<IEmailer>();
  94. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
  95. var result = await service.ToggleEnable(_user);
  96. Assert.Equal(false, result);
  97. }
  98. [Fact]
  99. public async Task Invite_ShouldFailIfUserExists()
  100. {
  101. _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_user);
  102. var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  103. var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  104. var mailer = Substitute.For<IEmailer>();
  105. var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
  106. var result = await service.SendRegistrationLink(new Contracts.DTOs.User.InviteDTO
  107. {
  108. Email = "string",
  109. FirstName = "string",
  110. LastName = "string",
  111. });
  112. Assert.Equal(true, result.IsError);
  113. }
  114. //[Fact] To be debuged later
  115. //public async Task Invite_ShouldPassIfUserDoesNotExist()
  116. //{
  117. // _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns<User>(x => null);
  118. // var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
  119. // var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
  120. // var mailer = Substitute.For<IEmailer>();
  121. // mailer.When(x => x.SendEmailAndWriteToDbAsync(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>(), Arg.Any<bool>())).Do(x => { });
  122. // var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
  123. // var result = await service.SendRegistrationLink(new InviteDTO
  124. // {
  125. // Email = "string@dilig.net",
  126. // FirstName = "string",
  127. // LastName = "string",
  128. // });
  129. // result.Data.Should().BeEquivalentTo(new
  130. // {
  131. // Message = "Link has been sent!"
  132. // });
  133. //}
  134. }
  135. }