145 lines
4.5 KiB
C#
145 lines
4.5 KiB
C#
using EmployeeManagmentBusinessLogic.BusinessLogic;
|
||
using EmployeeManagmentContracts.SearchModels;
|
||
using EmployeeManagmentContracts.ViewModels;
|
||
using EmployeeManagmentDataBaseImplement.Implements;
|
||
using Microsoft.Extensions.Logging;
|
||
using Moq;
|
||
using Xunit;
|
||
|
||
namespace EmployeeManagmentTests.Unit
|
||
{
|
||
public class VacationLogicTests
|
||
{
|
||
private readonly Mock<ILogger<VacationLogic>> _loggerMock;
|
||
private readonly VacationStorage _vacationStorage;
|
||
private readonly VacationLogic _vacationLogic;
|
||
|
||
public VacationLogicTests()
|
||
{
|
||
_loggerMock = new Mock<ILogger<VacationLogic>>();
|
||
_vacationStorage = new VacationStorage();
|
||
_vacationLogic = new VacationLogic(_loggerMock.Object, _vacationStorage);
|
||
}
|
||
|
||
[Fact]
|
||
public void GetFullList_ShouldReturnAllVacations()
|
||
{
|
||
// Arrange
|
||
var expectedCount = _vacationStorage.GetFullList().Count;
|
||
|
||
// Act
|
||
var result = _vacationLogic.GetFullList();
|
||
|
||
// Assert
|
||
Assert.NotNull(result);
|
||
Assert.Equal(expectedCount, result.Count);
|
||
}
|
||
|
||
[Fact]
|
||
public void GetFilteredList_ShouldReturnFilteredVacations()
|
||
{
|
||
// Arrange
|
||
var filter = new VacationSearchModel
|
||
{
|
||
StartData = DateTime.UtcNow.AddMonths(-1),
|
||
EndData = DateTime.UtcNow
|
||
};
|
||
|
||
// Act
|
||
var result = _vacationLogic.GetFilteredList(filter);
|
||
|
||
// Assert
|
||
Assert.NotNull(result);
|
||
Assert.All(result, vacation =>
|
||
Assert.True(vacation.StartData >= filter.StartData && vacation.EndData <= filter.EndData)
|
||
);
|
||
}
|
||
|
||
[Fact]
|
||
public void GetElement_ShouldReturnCorrectVacation()
|
||
{
|
||
// Arrange
|
||
var vacations = _vacationLogic.GetFullList();
|
||
if (vacations.Count == 0)
|
||
{
|
||
Assert.True(false, "No vacations available for testing.");
|
||
}
|
||
|
||
var vacationId = vacations.First().Id;
|
||
|
||
// Act
|
||
var result = _vacationLogic.GetElement(vacationId);
|
||
|
||
// Assert
|
||
Assert.NotNull(result);
|
||
Assert.Equal(vacationId, result.Id);
|
||
}
|
||
|
||
[Fact]
|
||
public void Insert_ShouldAddVacation()
|
||
{
|
||
// Arrange
|
||
var newVacation = new VacationViewModel
|
||
{
|
||
StartData = DateTime.UtcNow.AddDays(1).ToUniversalTime(), // Преобразование в UTC
|
||
EndData = DateTime.UtcNow.AddDays(10).ToUniversalTime(), // Преобразование в UTC
|
||
Passed = false,
|
||
EmployeeId = 1 // ID существующего сотрудника
|
||
};
|
||
|
||
var initialCount = _vacationLogic.GetFullList().Count;
|
||
|
||
// Act
|
||
_vacationLogic.Insert(newVacation);
|
||
var updatedCount = _vacationLogic.GetFullList().Count;
|
||
|
||
// Assert
|
||
Assert.Equal(initialCount + 1, updatedCount);
|
||
}
|
||
|
||
[Fact]
|
||
public void Update_ShouldModifyVacation()
|
||
{
|
||
// Arrange
|
||
var vacation = _vacationLogic.GetFullList().FirstOrDefault();
|
||
if (vacation == null)
|
||
{
|
||
Assert.True(false, "No vacations available for testing.");
|
||
}
|
||
|
||
vacation.EndData = DateTime.UtcNow.AddDays(20).ToUniversalTime(); // Преобразование в UTC
|
||
|
||
// Act
|
||
_vacationLogic.Update(vacation);
|
||
var updatedVacation = _vacationLogic.GetElement(vacation.Id);
|
||
|
||
// Assert
|
||
Assert.NotNull(updatedVacation);
|
||
|
||
// Сравниваем с учетом допустимой погрешности в миллисекундах
|
||
Assert.Equal(vacation.EndData, updatedVacation.EndData, TimeSpan.FromMilliseconds(1));
|
||
}
|
||
|
||
|
||
[Fact]
|
||
public void Delete_ShouldRemoveVacation()
|
||
{
|
||
// Arrange
|
||
var vacation = _vacationLogic.GetFullList().LastOrDefault();
|
||
if (vacation == null)
|
||
{
|
||
Assert.True(false, "No vacations available for testing.");
|
||
}
|
||
|
||
var initialCount = _vacationLogic.GetFullList().Count;
|
||
|
||
// Act
|
||
_vacationLogic.Delete(vacation.Id);
|
||
var updatedCount = _vacationLogic.GetFullList().Count;
|
||
|
||
// Assert
|
||
Assert.Equal(initialCount - 1, updatedCount);
|
||
}
|
||
}
|
||
}
|