您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

SelectionProcessServiceTests.cs 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.MappingProfiles;
  3. using Diligent.WebAPI.Business.Services;
  4. using Diligent.WebAPI.Contracts.DTOs.SelectionLevel;
  5. using Diligent.WebAPI.Contracts.DTOs.SelectionProcess;
  6. using Diligent.WebAPI.Contracts.Exceptions;
  7. using Diligent.WebAPI.Data.Entities;
  8. using Microsoft.AspNetCore.Identity;
  9. using Microsoft.Extensions.Logging;
  10. using NSubstitute.ReturnsExtensions;
  11. using System.Diagnostics;
  12. namespace Diligent.WebAPI.Tests.Services
  13. {
  14. public class SelectionProcessServiceTests
  15. {
  16. private readonly IMapper _mapper;
  17. private readonly List<SelectionProcess> _processes;
  18. private readonly SelectionProcess _selectionProcess;
  19. private readonly StatusChangeDTO _statusChangeDTO;
  20. private readonly InterviewerUpdateDTO _interviewerUpdateDTO;
  21. private readonly User _user;
  22. private readonly User _userId2;
  23. private readonly SelectionProcessUpdateStatusDto _selectionProcessUpdateStatusDto;
  24. private ILogger<SelectionProcessService> _logger = Substitute.For<ILogger<SelectionProcessService>>();
  25. private readonly SelectionProcessCreateDto _selectionProcessCreateDto;
  26. private readonly IUserStore<User> _mockStore = Substitute.For<IUserStore<User>>();
  27. private readonly UserManager<User> _userManager;
  28. public SelectionProcessServiceTests()
  29. {
  30. _userManager = Substitute.For<UserManager<User>>(_mockStore, null, null, null, null, null, null, null, null);
  31. _selectionProcessCreateDto = new SelectionProcessCreateDto
  32. {
  33. Id = 1,
  34. ApplicantId = 1,
  35. Date = DateTime.Now,
  36. Link = "link",
  37. Name = "custom name",
  38. SchedulerId = 1,
  39. SelectionLevelId = 4,
  40. Status = "Obrađen"
  41. };
  42. _selectionProcessUpdateStatusDto = new SelectionProcessUpdateStatusDto
  43. {
  44. Status = "Ceka na zakazivanje"
  45. };
  46. _selectionProcess = new SelectionProcess
  47. {
  48. Id = 1,
  49. ApplicantId = 1,
  50. Date = DateTime.Now,
  51. Link = "link",
  52. Name = "custom name",
  53. SchedulerId = 1,
  54. SelectionLevelId = 4,
  55. Status = "Obrađen"
  56. };
  57. _statusChangeDTO = new StatusChangeDTO
  58. {
  59. ProcessId = 1,
  60. Appointment = DateTime.Today,
  61. NewStatus = "Zakazan",
  62. SchedulerId = 1
  63. };
  64. _user = new User
  65. {
  66. Id = 1,
  67. PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
  68. FirstName = "Dzenis",
  69. LastName = "Dzenis",
  70. UserName = "dzenis",
  71. NormalizedUserName = "DZENIS",
  72. Email = "dzenis@dilig.net",
  73. NormalizedEmail = "DZENIS@DILIG.NET",
  74. EmailConfirmed = false,
  75. IsEnabled = true,
  76. AccessFailedCount = 0,
  77. SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  78. ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  79. };
  80. _userId2 = new User
  81. {
  82. Id = 2,
  83. PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
  84. FirstName = "Meris",
  85. LastName = "Ahmatovic",
  86. UserName = "merisa",
  87. NormalizedUserName = "MERIS",
  88. Email = "meris@dilig.net",
  89. NormalizedEmail = "MERIS@DILIG.NET",
  90. EmailConfirmed = false,
  91. IsEnabled = true,
  92. AccessFailedCount = 0,
  93. SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  94. ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
  95. };
  96. _interviewerUpdateDTO = new InterviewerUpdateDTO
  97. {
  98. ProcessId = 1,
  99. SchedulerId = 2
  100. };
  101. _processes = new List<SelectionProcess>
  102. {
  103. _selectionProcess
  104. };
  105. // configure mapper
  106. var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(
  107. new List<Profile>
  108. {
  109. new SelectionProcessMappingProfile(),
  110. }));
  111. _mapper = new Mapper(configuration);
  112. }
  113. [Fact]
  114. public async Task GetAll_ShouldReturnListOfProcesses_Always()
  115. {
  116. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  117. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  118. var result = await service.GetAllAsync();
  119. result.Should().HaveCount(1);
  120. }
  121. [Fact]
  122. public async Task FinishSelectionProcess_ShouldReturnTrueAndAddNewSelectionProcess_WhenProcessExists()
  123. {
  124. var process = new SelectionProcess
  125. {
  126. Id = 1,
  127. ApplicantId = 1,
  128. Date = DateTime.Now,
  129. Link = "link",
  130. Name = "custom name",
  131. SchedulerId = 1,
  132. SelectionLevelId = 1,
  133. Status = "Zakazan"
  134. };
  135. var processes = new List<SelectionProcess>
  136. {
  137. process
  138. };
  139. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(processes);
  140. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  141. var result = await service.FinishSelectionProcess(_selectionProcessCreateDto);
  142. var newProcesses = await service.GetAllAsync();
  143. result.Should().BeTrue();
  144. newProcesses.Should().HaveCount(processes.Count() + 1);
  145. }
  146. [Fact]
  147. public async Task FinishSelectionProcess_ShouldThrowEntityNotFooundException_WhenProcessDoesnotExist()
  148. {
  149. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  150. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  151. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.FinishSelectionProcess(new SelectionProcessCreateDto { Id = 1000 }));
  152. }
  153. [Fact]
  154. public async Task FinishSelectionProcess_ShouldThrowEntityNotFooundException_WhenProcessIsInLastLevel()
  155. {
  156. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  157. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  158. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.FinishSelectionProcess(new SelectionProcessCreateDto { Id = 1, SelectionLevelId = 4 }));
  159. }
  160. [Fact]
  161. public async Task UpdateSelectionProcessStatusAsync_ShouldUpdateStatusOfProcess_WhenProcessExists()
  162. {
  163. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  164. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  165. await service.UpdateSelectionProcessStatusAsync(1, _selectionProcessUpdateStatusDto);
  166. _selectionProcess.Status.Should().Be("Ceka na zakazivanje");
  167. }
  168. [Fact]
  169. public async Task UpdateSelectionProcessStatusAsync_ShouldThrowEntityNotFooundException_WhenProcessDoesnotExist()
  170. {
  171. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  172. SelectionProcessService service = new(_userManager,databaseContext, _mapper, _logger);
  173. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.UpdateSelectionProcessStatusAsync(1000,_selectionProcessUpdateStatusDto));
  174. }
  175. [Fact]
  176. public async Task StatusUpdate_ShouldUpdateStatusOfProcess_WhenProcessExists()
  177. {
  178. _userManager.FindByIdAsync(Arg.Any<string>()).Returns(_user);
  179. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  180. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  181. await service.StatusUpdate(_statusChangeDTO);
  182. _selectionProcess.Status.Should().Be("Zakazan");
  183. _selectionProcess.Date.Should().Be(DateTime.Today);
  184. _selectionProcess.SchedulerId.Should().Be(1);
  185. }
  186. [Fact]
  187. public async Task StatusUpdate_ShouldThrowEntityNotFooundException_WhenUserDoesNotExist()
  188. {
  189. _userManager.FindByIdAsync(Arg.Any<string>()).ReturnsNull();
  190. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  191. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  192. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.StatusUpdate(_statusChangeDTO));
  193. }
  194. [Fact]
  195. public async Task StatusUpdate_ShouldThrowEntityNotFooundException_WhenProcessDoesnotExist()
  196. {
  197. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  198. SelectionProcessService service = new(_userManager,databaseContext, _mapper, _logger);
  199. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.StatusUpdate(new StatusChangeDTO { ProcessId = 1000 }));
  200. }
  201. [Fact]
  202. public async Task InterviewerUpdate_ShouldUpdateStatusOfProcess_WhenProcessExists()
  203. {
  204. _userManager.FindByIdAsync(Arg.Any<string>()).Returns(_userId2);
  205. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  206. SelectionProcessService service = new(_userManager, databaseContext, _mapper, _logger);
  207. await service.InterviewerUpdate(_interviewerUpdateDTO);
  208. _selectionProcess.SchedulerId.Should().Be(2);
  209. }
  210. [Fact]
  211. public async Task InterviewerUpdate_ShouldThrowEntityNotFooundException_WhenProcessDoesnotExist()
  212. {
  213. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  214. SelectionProcessService service = new(_userManager,databaseContext, _mapper, _logger);
  215. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.InterviewerUpdate(new InterviewerUpdateDTO { ProcessId = 1000, SchedulerId = 2 }));
  216. }
  217. [Fact]
  218. public async Task InterviewerUpdate_ShouldThrowEntityNotFooundException_WhenUserDoesnotExist()
  219. {
  220. _userManager.FindByIdAsync(Arg.Any<string>()).ReturnsNull();
  221. var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
  222. SelectionProcessService service = new(_userManager,databaseContext, _mapper, _logger);
  223. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.InterviewerUpdate(_interviewerUpdateDTO));
  224. }
  225. }
  226. }