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

ApplicantServiceTests.cs 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.Extensions;
  3. using Diligent.WebAPI.Business.MappingProfiles;
  4. using Diligent.WebAPI.Business.Services;
  5. using Diligent.WebAPI.Contracts.DTOs.Ad;
  6. using Diligent.WebAPI.Contracts.DTOs.Applicant;
  7. using Diligent.WebAPI.Contracts.DTOs.SelectionProcess;
  8. using Diligent.WebAPI.Contracts.Exceptions;
  9. using Diligent.WebAPI.Data.Entities;
  10. using Microsoft.AspNetCore.Http;
  11. using static Diligent.WebAPI.Data.Entities.Applicant;
  12. namespace Diligent.WebAPI.Tests.Services
  13. {
  14. public class ApplicantServiceTests
  15. {
  16. private readonly IMapper _mapper;
  17. private readonly IHttpContextAccessor _httpContextAccessor = Substitute.For<IHttpContextAccessor>();
  18. private readonly HttpContext _httpContext;
  19. private readonly List<Applicant> _applicants;
  20. private readonly List<Ad> _ads;
  21. private readonly List<SelectionProcess> _selectionProcesses;
  22. public ApplicantServiceTests()
  23. {
  24. _applicants = MockData.GetListOfApplicants();
  25. _ads = MockData.GetListOfAds();
  26. // configure mapper
  27. var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(
  28. new List<Profile>
  29. {
  30. new ApplicantMappingProfile(),
  31. new AdMappingProfile(),
  32. new SelectionProcessMappingProfile()
  33. }));
  34. _mapper = new Mapper(configuration);
  35. _httpContext = new DefaultHttpContext();
  36. }
  37. [Fact]
  38. public async Task GetFilteredApplicants_ShouldReturnListOfApplicants_Always()
  39. {
  40. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  41. _httpContextAccessor.HttpContext.Returns(_httpContext);
  42. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  43. var filterDto = new ApplicantFilterDto
  44. {
  45. CurrentPage = 1,
  46. PageSize = 4
  47. };
  48. var result = await applicantService.GetFilteredApplicants(filterDto);
  49. Assert.Equal(_httpContext.Response.Headers["Pagination"], result.Count.ToString());
  50. result.Should().BeEquivalentTo(_mapper.Map<List<ApplicantViewDto>>(_applicants));
  51. }
  52. [Fact]
  53. public async Task GetById_ShouldReturnApplicant_WhenApplicantExist()
  54. {
  55. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  56. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  57. var result = await applicantService.GetById(1);
  58. result.Should().BeEquivalentTo(_mapper.Map<ApplicantViewDto>(_applicants[0]));
  59. }
  60. [Fact]
  61. public async Task GetById_ShouldThrowEntityNotFooundException_WhenApplicantDontExist()
  62. {
  63. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  64. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  65. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await applicantService.GetById(1000));
  66. }
  67. [Fact]
  68. public async Task CreateApplicant_ShouldAddEntityIntoDatabase_Always()
  69. {
  70. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  71. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  72. ApplicantCreateDto applicantCreateDto = new()
  73. {
  74. ApplicationChannel = "Facebook",
  75. BitBucketLink = null,
  76. CV = "link",
  77. Email = "some@mail.com",
  78. Experience = 1,
  79. FirstName = "Meris",
  80. LastName = "Ahmatovic",
  81. GithubLink = null,
  82. LinkedlnLink = null,
  83. PhoneNumber = "432424",
  84. Position = ".NET Developer",
  85. TypeOfEmployment = TypesOfEmployment.Intership.ToString(),
  86. SelectionProcesses = _mapper.Map<List<SelectionProcessCreateDto>>(_selectionProcesses)
  87. };
  88. await applicantService.CreateApplicant(applicantCreateDto);
  89. var filterDto = new ApplicantFilterDto
  90. {
  91. CurrentPage = 1,
  92. PageSize = 4
  93. };
  94. var result = await applicantService.GetFilteredApplicants(filterDto);
  95. Assert.Equal(2, result.Count);
  96. }
  97. [Fact]
  98. public async Task DeleteApplicant_ShouldDeleteApplicant_WhenApplicantExist()
  99. {
  100. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  101. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  102. await applicantService.DeleteApplicant(1);
  103. var filterDto = new ApplicantFilterDto
  104. {
  105. CurrentPage = 1,
  106. PageSize = 4
  107. };
  108. var applicants = await applicantService.GetFilteredApplicants(filterDto);
  109. Assert.Empty(applicants);
  110. }
  111. [Fact]
  112. public async Task DeleteApplicant_ShouldThrowEntityNotFooundException_WhenApplicantDontExist()
  113. {
  114. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  115. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  116. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await applicantService.DeleteApplicant(1000));
  117. }
  118. [Fact]
  119. public async Task UpdateApplicant_ShouldUpdateApplicant_WhenApplicantExist()
  120. {
  121. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  122. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  123. ApplicantUpdateDto applicantUpdateDto = new()
  124. {
  125. ApplicationChannel = "Instagram",
  126. BitBucketLink = null,
  127. CV = "link",
  128. Email = "some@mail.com",
  129. Experience = 1,
  130. FirstName = "Dzenis",
  131. LastName = "Hadzifejzovic",
  132. GithubLink = null,
  133. LinkedlnLink = null,
  134. PhoneNumber = "432424",
  135. Position = "React Developer"
  136. };
  137. await applicantService.UpdateApplicant(1, applicantUpdateDto);
  138. var applicant = await applicantService.GetById(1);
  139. Assert.Equal(applicant.Position, applicantUpdateDto.Position);
  140. }
  141. [Fact]
  142. public async Task GetAllAdsApplicants_ShouldReturnListOfAdApplicants_Always()
  143. {
  144. var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
  145. ApplicantService applicantService = new(databaseContext, _mapper, _httpContextAccessor);
  146. var result = await applicantService.GetAllAdsApplicants();
  147. result.Should().BeEquivalentTo(_mapper.Map<List<AdApplicantsViewDto>>(_ads));
  148. }
  149. [Fact]
  150. public async Task GetApplicantWithSelectionProcessesById_ShouldReturnApplicant_WhenApplicantExists()
  151. {
  152. var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
  153. ApplicantService applicantService = new(databaseContext, _mapper,_httpContextAccessor);
  154. var result = await applicantService.GetApplicantWithSelectionProcessesById(1);
  155. var processes = result.SelectionProcesses;
  156. processes.Should().HaveCount(3);
  157. result.Should().BeEquivalentTo(_mapper.Map<ApplicantViewDto>(_applicants[0]));
  158. }
  159. }
  160. }