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.

AdsControllerTests.cs 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. using Diligent.WebAPI.Contracts.DTOs.Ad;
  2. using Diligent.WebAPI.Contracts.Exceptions;
  3. using Diligent.WebAPI.Data.Entities;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace Diligent.WebAPI.Tests.Controllers
  10. {
  11. public class AdsControllerTests
  12. {
  13. private IAdService _adService = Substitute.For<IAdService>();
  14. private List<AdResponseDto> _ads = new List<AdResponseDto>();
  15. private AdResponseDto _ad;
  16. public AdsControllerTests()
  17. {
  18. _ad = new AdResponseDto
  19. {
  20. Id = 1,
  21. Title = "React Developer",
  22. MinimumExperience = 0,
  23. CreatedAt = DateTime.UtcNow,
  24. ExpiredAt = DateTime.UtcNow.AddDays(30),
  25. KeyResponsibilities = "KR|KR",
  26. Requirements = "R|R|R",
  27. Offer = "O|O",
  28. WorkHour = nameof(WorkHours.FullTime),
  29. EmploymentType = nameof(EmploymentTypes.Intership)
  30. };
  31. _ads.Add(_ad);
  32. }
  33. [Fact]
  34. public async Task GetAll_ShouldReturn200OK_WhenCalled()
  35. {
  36. _adService.GetAllAsync().Returns(_ads);
  37. AdsController adsController = new(_adService);
  38. var result = await adsController.GetAll();
  39. (result as OkObjectResult).StatusCode.Should().Be(200);
  40. }
  41. [Fact]
  42. public async Task GetById_ShouldReturn200OK_WhenAdExists()
  43. {
  44. _adService.GetByIdAsync(Arg.Any<int>()).Returns(_ad);
  45. AdsController adsController = new(_adService);
  46. var result = await adsController.GetById(1);
  47. (result as OkObjectResult).StatusCode.Should().Be(200);
  48. }
  49. [Fact]
  50. public async Task GetById_ShouldThrowEntityNotFoundException_WhenAdDontExist()
  51. {
  52. _adService.When(x => x.GetByIdAsync(Arg.Any<int>())).Do(x => { throw new EntityNotFoundException(); });
  53. AdsController adsController = new(_adService);
  54. await Assert.ThrowsAsync<EntityNotFoundException>(() => adsController.GetById(1000));
  55. }
  56. [Fact]
  57. public async Task GetAdDetailsById_ShouldReturn200OK_WhenAdExists()
  58. {
  59. _adService.GetAdDetailsByIdAsync(Arg.Any<int>()).Returns(new AdDetailsResponseDto
  60. {
  61. Id = 1,
  62. Title = "React Developer",
  63. MinimumExperience = 0,
  64. CreatedAt = DateTime.UtcNow,
  65. ExpiredAt = DateTime.UtcNow.AddDays(30),
  66. KeyResponsibilities = "KR|KR",
  67. Requirements = "R|R|R",
  68. Offer = "O|O"
  69. });
  70. AdsController adsController = new(_adService);
  71. var result = await adsController.GetAdDetailsById(1);
  72. (result as OkObjectResult).StatusCode.Should().Be(200);
  73. }
  74. [Fact]
  75. public async Task GetAdDetailsById_ShouldThrowEntityNotFoundException_WhenAdDontExist()
  76. {
  77. _adService.When(x => x.GetAdDetailsByIdAsync(Arg.Any<int>())).Do(x => { throw new EntityNotFoundException(); });
  78. AdsController adsController = new(_adService);
  79. await Assert.ThrowsAsync<EntityNotFoundException>(() => adsController.GetAdDetailsById(1000));
  80. }
  81. [Fact]
  82. public async Task GetArchiveAds_ShouldReturn200OK_WhenCalled()
  83. {
  84. _adService.GetArchiveAds().Returns(_ads);
  85. AdsController adsController = new(_adService);
  86. var result = await adsController.GetArchiveAds();
  87. (result as OkObjectResult).StatusCode.Should().Be(200);
  88. }
  89. [Fact]
  90. public async Task GetFilteredAds_ShouldReturn200OK_WhenCalled()
  91. {
  92. var filters = new AdFilterDto
  93. {
  94. MinExperience = 0,
  95. MaxExperience = 10,
  96. EmploymentType = "Work",
  97. WorkHour = "FullTime",
  98. Technologies = new string[] { ".NET" }
  99. };
  100. _adService.GetFilteredAdsAsync(filters).Returns(_ads);
  101. AdsController adsController = new(_adService);
  102. var result = await adsController.GetFilteredAds(filters);
  103. (result as OkObjectResult).StatusCode.Should().Be(200);
  104. }
  105. [Fact]
  106. public async Task CreateAd_ShouldReturn201Created_WhenAdCreated()
  107. {
  108. var adCreateDto = new AdCreateDto
  109. {
  110. Title = "React Developer",
  111. MinimumExperience = 0,
  112. CreatedAt = DateTime.UtcNow,
  113. ExpiredAt = DateTime.UtcNow.AddDays(30),
  114. KeyResponsibilities = "KR|KR",
  115. Requirements = "R|R|R",
  116. Offer = "O|O"
  117. };
  118. _adService.CreateAsync(adCreateDto);
  119. AdsController adsController = new(_adService);
  120. var result = await adsController.Create(adCreateDto);
  121. (result as StatusCodeResult).StatusCode.Should().Be(201);
  122. }
  123. [Fact]
  124. public async Task UpdateAd_ShouldReturn200OK_WhenAdUpdated()
  125. {
  126. var adUpdateDto = new AdUpdateDto
  127. {
  128. Title = "React Developer",
  129. MinimumExperience = 0,
  130. CreatedAt = DateTime.UtcNow,
  131. ExpiredAt = DateTime.UtcNow.AddDays(30),
  132. KeyResponsibilities = "KR|KR",
  133. Requirements = "R|R|R",
  134. Offer = "O|O"
  135. };
  136. _adService.UpdateAsync(1, adUpdateDto);
  137. AdsController adsController = new(_adService);
  138. var result = await adsController.Update(adUpdateDto, 1);
  139. (result as StatusCodeResult).StatusCode.Should().Be(200);
  140. }
  141. [Fact]
  142. public async Task UpdateAd_ShouldThrowEntityNotFoundException_WhenAdDontExist()
  143. {
  144. var adUpdateDto = new AdUpdateDto
  145. {
  146. Title = "React Developer",
  147. MinimumExperience = 0,
  148. CreatedAt = DateTime.UtcNow,
  149. ExpiredAt = DateTime.UtcNow.AddDays(30),
  150. KeyResponsibilities = "KR|KR",
  151. Requirements = "R|R|R",
  152. Offer = "O|O"
  153. };
  154. _adService.When(x => x.UpdateAsync(Arg.Any<int>(), adUpdateDto)).Do(x => { throw new EntityNotFoundException(); });
  155. AdsController adsController = new(_adService);
  156. await Assert.ThrowsAsync<EntityNotFoundException>(() => adsController.Update(adUpdateDto, 1000));
  157. }
  158. [Fact]
  159. public async Task DeleteAd_ShouldReturn204NoContent_WhenAdDeleted()
  160. {
  161. _adService.DeleteAsync(1);
  162. AdsController adsController = new(_adService);
  163. var result = await adsController.DeleteAd(1);
  164. (result as StatusCodeResult).StatusCode.Should().Be(204);
  165. }
  166. [Fact]
  167. public async Task DeleteAd_ShouldThrowEntityNotFoundException_WhenAdDontExist()
  168. {
  169. _adService.When(x => x.DeleteAsync(Arg.Any<int>())).Do(x => { throw new EntityNotFoundException(); });
  170. AdsController adsController = new(_adService);
  171. await Assert.ThrowsAsync<EntityNotFoundException>(() => adsController.DeleteAd(1000));
  172. }
  173. }
  174. }