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.
187 lines
6.9 KiB
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);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|