You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OptifitWebService/TestAPI/ControllerTests/ExperienceControllerTest.cs

187 lines
6.9 KiB

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Moq;
using Server.Controller.v1;
using Server.Dto.Request;
using Server.Dto.Response;
using Server.IServices;
using Shared.Criteria;
namespace TestAPI.ControllerTests
{
public class ExperienceControllerTest
{
private readonly ILogger<ExperiencesController> _loggerMock = Mock.Of<ILogger<ExperiencesController>>();
private readonly Mock<IExperiencesService> _servicesMock = new Mock<IExperiencesService>();
[Fact]
public async Task GetExperiences()
{
// Arrange
var expectedExperiences = new List<ResponseExperienceDto>
{
new ResponseExperienceDto { Id = "1", Title = "Iut" },
};
_servicesMock.Setup(s => s.GetExperiences(null, 0, 10, ExperienceOrderCriteria.StartDate, true))
.ReturnsAsync((expectedExperiences.Count, expectedExperiences));
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
// Act
var result = await experiencesController.GetExperiences(null, 0, 10);
// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var experienceList = Assert.IsAssignableFrom<IEnumerable<ResponseExperienceDto>>(okResult.Value);
Assert.Equal(expectedExperiences.Count, experienceList.Count());
}
[Fact]
public async Task GetExperienceById_ValidId()
{
// Arrange
var expectedExperience = new ResponseExperienceDto { Id = "1", Title = "Iut" };
_servicesMock.Setup(s => s.GetExperienceById("1")).ReturnsAsync(expectedExperience);
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
// Act
var result = experiencesController.GetExperienceById("1");
// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var experienceItem = Assert.IsType<ResponseExperienceDto>(okResult.Value);
Assert.Equal(expectedExperience.Id, experienceItem.Id);
Assert.Equal(expectedExperience.Title, experienceItem.Title);
}
[Fact]
public async Task GetExperienceById_InvalidId()
{
// Arrange
_servicesMock.Setup(s => s.GetExperienceById("hgfyhgyjhu")).ReturnsAsync((ResponseExperienceDto?)null);
// Act
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
var result = experiencesController.GetExperienceById("hgfyhgyjhu");
// Assert
Assert.IsType<NotFoundResult>(result);
}
[Fact]
public async Task CreateExperience()
{
// Arrange
var newExperience = new RequestExperienceDto
{
AlumniId = "A1",
Title = "Junior Dev",
StartingDate = DateTime.Now.AddYears(-2),
CompanyName = "CGI",
CurrentJob = false
};
var expectedExperience = new ResponseExperienceDto { Id = "4", Title = "Junior Dev" };
_servicesMock.Setup(s => s.CreateExperience(newExperience)).ReturnsAsync(expectedExperience);
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
// Act
var result = experiencesController.CreateExperience(newExperience);
// Assert
var createdAtResult = Assert.IsType<CreatedAtActionResult>(result);
var createdExperience = Assert.IsType<ResponseExperienceDto>(createdAtResult.Value);
Assert.Equal(expectedExperience.Id, createdExperience.Id);
Assert.Equal(expectedExperience.Title, createdExperience.Title);
}
[Fact]
public async Task UpdateExperience_ValidId()
{
// Arrange
var updatedExperience = new RequestExperienceDto
{
Title = "Update Software Developer",
StartingDate = DateTime.Now.AddYears(-2),
EndingDate = DateTime.Now,
CompanyName = "TechCo",
CurrentJob = false,
AlumniId = "A1"
};
var expectedExperience = new ResponseExperienceDto { Id = "1", Title = "Update Software Developer" };
_servicesMock.Setup(s => s.UpdateExperience("1", updatedExperience)).ReturnsAsync(expectedExperience);
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
// Act
var result = experiencesController.UpdateExperience("1", updatedExperience);
// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var updatedExperienceResult = Assert.IsType<ResponseExperienceDto>(okResult.Value);
Assert.Equal(expectedExperience.Id, updatedExperienceResult.Id);
Assert.Equal(expectedExperience.Title, updatedExperienceResult.Title);
}
[Fact]
public async Task UpdateExperience_InvalidId()
{
// Arrange
var updatedOffer = new RequestExperienceDto
{
Title = "Update Software Developer",
StartingDate = DateTime.Now.AddYears(-2),
EndingDate = DateTime.Now,
CompanyName = "TechCo",
CurrentJob = false,
AlumniId = "A1"
};
_servicesMock.Setup(s => s.UpdateExperience("InvalidId", updatedOffer)).ReturnsAsync((ResponseExperienceDto?)null);
// Act
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
var result = experiencesController.UpdateExperience("InvalidId", updatedOffer);
// Assert
var badRequestResult = Assert.IsType<BadRequestResult>(result);
}
[Fact]
public async Task DeleteExperience_ValidId()
{
// Arrange
_servicesMock.Setup(s => s.DeleteExperience("1")).ReturnsAsync(true);
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
// Act
var result = experiencesController.DeleteExperience("1");
// Assert
Assert.IsType<OkResult>(result);
}
[Fact]
public async Task DeleteExperience_InvalidId()
{
// Arrange
_servicesMock.Setup(s => s.DeleteExperience("InvalidId")).ReturnsAsync(false);
var experiencesController = new ExperiencesController(_loggerMock, _servicesMock.Object);
// Act
var result = experiencesController.DeleteExperience("InvalidId");
// Assert
Assert.IsType<NotFoundResult>(result);
}
}
}