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

SelectionLevelsServiceTests.cs 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.MappingProfiles;
  3. using Diligent.WebAPI.Business.Services;
  4. using Diligent.WebAPI.Contracts.DTOs.Ad;
  5. using Diligent.WebAPI.Contracts.DTOs.Applicant;
  6. using Diligent.WebAPI.Contracts.DTOs.SelectionLevel;
  7. using Diligent.WebAPI.Contracts.DTOs.SelectionProcess;
  8. using Diligent.WebAPI.Contracts.Exceptions;
  9. using Diligent.WebAPI.Data.Entities;
  10. using FluentAssertions.Common;
  11. using Microsoft.Extensions.Logging;
  12. using NSubstitute.ExceptionExtensions;
  13. using NSubstitute.Extensions;
  14. using System.Reflection;
  15. namespace Diligent.WebAPI.Tests.Services
  16. {
  17. public class SelectionLevelsServiceTests
  18. {
  19. private readonly IMapper _mapper;
  20. private readonly List<SelectionLevel> _levels;
  21. private ILogger<SelectionLevelService> _logger = Substitute.For<ILogger<SelectionLevelService>>();
  22. private readonly SelectionLevel _selectionLevel;
  23. public SelectionLevelsServiceTests()
  24. {
  25. _selectionLevel = new SelectionLevel
  26. {
  27. Id = 1,
  28. Name = "HR intervju",
  29. SelectionProcesses = new List<SelectionProcess>()
  30. };
  31. // configure mapper
  32. var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(
  33. new List<Profile>
  34. {
  35. new SelectionLevelMappingProfile(),
  36. new SelectionProcessMappingProfile(),
  37. }));
  38. _mapper = new Mapper(configuration);
  39. }
  40. [Fact]
  41. public async Task GetAll_ShouldReturnListOfLevels_Always()
  42. {
  43. var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
  44. SelectionLevelService service = new(databaseContext, _mapper, _logger);
  45. var result = await service.GetAllAsync();
  46. result.Should().HaveCount(4);
  47. }
  48. [Fact]
  49. public async Task GetFilteredData_ShouldReturnListOfLevels_Always()
  50. {
  51. var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
  52. databaseContext.SelectionLevels.First().SelectionProcesses = new List<SelectionProcess>
  53. {
  54. new SelectionProcess{ Id = 1, Status = "Obrađen", Date = DateTime.Now},
  55. new SelectionProcess{ Id = 2, Status = "Obrađen", Date = DateTime.Now.AddMonths(-1)},
  56. new SelectionProcess{ Id = 3, Status = "Čeka na zakazivanje", Date = DateTime.Now},
  57. new SelectionProcess{ Id = 4, Status = "Čeka na zakazivanje", Date = DateTime.Now.AddMonths(-1)},
  58. };
  59. SelectionLevelService service = new(databaseContext, _mapper, _logger);
  60. var filter = new SelectionProcessFilterDto
  61. {
  62. DateStart = DateTime.Now.AddDays(-1),
  63. DateEnd = DateTime.Now.AddDays(1),
  64. Statuses = new string[]{ "Obrađen", "Zakazan" }
  65. };
  66. var result = service.GetFilteredLevelsAsync(filter);
  67. result.Should().HaveCount(4);
  68. result.First().SelectionProcesses.Should().HaveCount(1);
  69. }
  70. [Fact]
  71. public async Task GetById_ShouldReturnLevel_WhenLevelExist()
  72. {
  73. var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
  74. SelectionLevelService service = new(databaseContext, _mapper, _logger);
  75. var result = await service.GetByIdAsync(1);
  76. result.Should().BeEquivalentTo(_mapper.Map<SelectionLevelResposneDto>(_selectionLevel));
  77. }
  78. [Fact]
  79. public async Task GetById_ShouldThrowEntityNotFooundException_WhenLevelDoesnotExist()
  80. {
  81. var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
  82. SelectionLevelService service = new(databaseContext, _mapper, _logger);
  83. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.GetByIdAsync(1000));
  84. }
  85. [Fact]
  86. public async Task GetByIdEntity_ShouldReturnLevel_WhenLevelExist()
  87. {
  88. var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
  89. SelectionLevelService service = new(databaseContext, _mapper, _logger);
  90. var result = await service.GetByIdEntity(1);
  91. result.Id.Should().Be(_selectionLevel.Id);
  92. result.Name.Should().Be(_selectionLevel.Name);
  93. }
  94. [Fact]
  95. public async Task GetByIdEntity_ShouldThrowEntityNotFooundException_WhenLevelDoesnotExist()
  96. {
  97. var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
  98. SelectionLevelService service = new(databaseContext, _mapper, _logger);
  99. await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.GetByIdEntity(1000));
  100. }
  101. [Fact]
  102. public async Task GetCountByLevels_ShouldReturnListOfLevels_Always()
  103. {
  104. var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
  105. databaseContext.SelectionLevels.First().SelectionProcesses = new List<SelectionProcess>
  106. {
  107. new SelectionProcess{ Id = 1, Status = "Obrađen", Date = DateTime.Now},
  108. new SelectionProcess{ Id = 2, Status = "Zakazan", Date = DateTime.Now.AddMonths(-1)},
  109. new SelectionProcess{ Id = 3, Status = "Čeka na zakazivanje", Date = DateTime.Now},
  110. new SelectionProcess{ Id = 4, Status = "Čeka na zakazivanje", Date = DateTime.Now.AddMonths(-1)},
  111. };
  112. SelectionLevelService service = new(databaseContext, _mapper, _logger);
  113. var statues = new List<string> { "Obrađen", "Zakazan" };
  114. var result = await service.GetCountByLevels(statues);
  115. result.Should().HaveCount(4);
  116. result.First().CountAll.Should().Be(4);
  117. result.First().CountDone.Should().Be(2);
  118. }
  119. }
  120. }