using Diligent.WebAPI.Contracts.DTOs.Ad; using Diligent.WebAPI.Contracts.DTOs.SelectionLevel; using Diligent.WebAPI.Contracts.DTOs.SelectionProcess; using Diligent.WebAPI.Contracts.Exceptions; namespace Diligent.WebAPI.Tests.Controllers { public class SelectionLevelsControllerTests { private ISelectionLevelService _service = Substitute.For(); private readonly SelectionLevelResposneDto _selectionLevel; public SelectionLevelsControllerTests() { _selectionLevel = new SelectionLevelResposneDto { Id = 1, Name = "HR intervju" }; } [Fact] public async Task GetById_ShouldReturn_200OK_WhenLevelExist() { _service.GetByIdAsync(Arg.Any()).Returns(_selectionLevel); SelectionLevelsController controller = new(_service); var result = await controller.GetById(1); (result as OkObjectResult).StatusCode.Should().Be(200); } [Fact] public async Task GetById_ShouldThrowEntityNotFooundException_WhenLevelDoesnotExist() { _service.When(x => x.GetByIdAsync(Arg.Any())).Do(x => { throw new EntityNotFoundException(); }); SelectionLevelsController controller = new(_service); await Assert.ThrowsAsync(() => controller.GetById(1000)); } [Fact] public async Task GetAll_ShouldReturn_200OK_Always() { var levels = new List { new SelectionLevelResponseWithDataDto { Id = 1, Name = "HR intervju", SelectionProcesses = new List() } }; _service.GetAllAsync().Returns(levels); SelectionLevelsController controller = new(_service); var result = await controller.GetAll(); (result as OkObjectResult).StatusCode.Should().Be(200); } [Fact] public async Task GetFilteredLevels_ShouldReturn_200OK_Always() { var levels = new List { new SelectionLevelResponseWithDataDto { Id = 1, Name = "HR intervju", SelectionProcesses = new List() } }; var filter = new SelectionProcessFilterDto(); _service.GetAllAsync().Returns(levels); SelectionLevelsController controller = new(_service); var result = await controller.GetFilteredLevels(filter); (result as OkObjectResult).StatusCode.Should().Be(200); } } }