2 Commits

Author SHA1 Message Date
maxim
79089f9a32 вот теперь точно ready 2025-03-31 16:35:01 +04:00
maxim
f510cb98dd ready 2025-03-31 16:32:50 +04:00
7 changed files with 372 additions and 126 deletions

View File

@@ -0,0 +1,13 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/.idea.TwoFromTheCasketContratcs.iml
/projectSettingsUpdater.xml
/modules.xml
/contentModel.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

@@ -12,13 +12,14 @@ namespace TwoFromTheCasketBuisnessLogic.Implementations
{ {
internal class SalaryBusinessLogicContract(ISalaryStorageContract internal class SalaryBusinessLogicContract(ISalaryStorageContract
salaryStorageContract, IPostStorageContract salaryStorageContract, IPostStorageContract
postStorageContract, IMasterStorageContract _masterStorageContract, ILogger postStorageContract, IMasterStorageContract masterStorageContract, ILogger
logger) : ISalaryBuisnessLogicContract logger, IOrderStorageContract orderStorageContract) : ISalaryBuisnessLogicContract
{ {
private readonly ILogger _logger; private readonly ILogger _logger = logger;
private readonly ISalaryStorageContract _salaryStorageContract; private readonly ISalaryStorageContract _salaryStorageContract = salaryStorageContract;
private readonly IPostStorageContract _postStorageContract; private readonly IPostStorageContract _postStorageContract = postStorageContract;
private readonly IMasterStorageContract _masterStorageContract; private readonly IMasterStorageContract _masterStorageContract = masterStorageContract;
private readonly IOrderStorageContract _orderStorageContract = orderStorageContract;
public List<SalaryDataModel> GetAllSalariesByPeriod(DateTime fromDate, DateTime toDate) public List<SalaryDataModel> GetAllSalariesByPeriod(DateTime fromDate, DateTime toDate)
@@ -56,7 +57,7 @@ logger) : ISalaryBuisnessLogicContract
public void CalculateSalaryByMonth(DateTime date) public void CalculateSalaryByMonth(DateTime date)
{ {
//_logger.LogInformation("CalculateSalaryByMonth: {date}", date); _logger.LogInformation("CalculateSalaryByMonth: {date}", date);
var startDate = new DateTime(date.Year, date.Month, 1); var startDate = new DateTime(date.Year, date.Month, 1);
var finishDate = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month)); var finishDate = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));
@@ -65,14 +66,16 @@ logger) : ISalaryBuisnessLogicContract
foreach (var master in masters) foreach (var master in masters)
{ {
master.Validate(); // Проверяем валидность данных master.Validate();
var orders = _orderStorageContract.GetList()?.Count(x => x.Id.IsGuid()) ??
throw new NullListException();
var post = _postStorageContract.GetElementById(master.PostId) ?? throw new NullListException(); var post = _postStorageContract.GetElementById(master.PostId) ?? throw new NullListException();
var baseSalary = post.Salary; // Основная зарплата var baseSalary = post.Salary;
var prize = 500.0; // Премия var prize = 500.0;
var totalSalary = baseSalary + prize; // Итоговая зарплата var totalSalary = baseSalary + prize;
_logger.LogDebug("The master {master.Id} was paid a salary of {salary}", master.Id, totalSalary); _logger.LogDebug("The master {master.Id} was paid a salary of {salary}", master.Id, totalSalary);

View File

@@ -16,8 +16,10 @@ namespace TwoFromTheCasketTest.BuisnessLogicContractTests;
[TestFixture] [TestFixture]
internal class SalaryBusinessLogicContractTests internal class SalaryBusinessLogicContractTests
{ {
private SalaryBusinessLogicContract _salaryBusinessLogicContract; private SalaryBusinessLogicContract _salaryBusinessLogicContract;
private Mock<ISalaryStorageContract> _salaryStorageContract; private Mock<ISalaryStorageContract> _salaryStorageContract;
private Mock<IOrderStorageContract> _orderStorageContract;
private Mock<IPostStorageContract> _postStorageContract; private Mock<IPostStorageContract> _postStorageContract;
private Mock<IMasterStorageContract> _masterStorageContract; private Mock<IMasterStorageContract> _masterStorageContract;
@@ -25,196 +27,406 @@ internal class SalaryBusinessLogicContractTests
public void OneTimeSetUp() public void OneTimeSetUp()
{ {
_salaryStorageContract = new Mock<ISalaryStorageContract>(); _salaryStorageContract = new Mock<ISalaryStorageContract>();
_orderStorageContract = new Mock<IOrderStorageContract>();
_postStorageContract = new Mock<IPostStorageContract>(); _postStorageContract = new Mock<IPostStorageContract>();
_masterStorageContract = new Mock<IMasterStorageContract>(); _masterStorageContract = new Mock<IMasterStorageContract>();
_salaryBusinessLogicContract = new SalaryBusinessLogicContract(_salaryStorageContract.Object,
_salaryBusinessLogicContract = new SalaryBusinessLogicContract( _postStorageContract.Object, _masterStorageContract.Object,
_salaryStorageContract.Object, new Mock<ILogger>().Object, _orderStorageContract.Object);
_postStorageContract.Object,
_masterStorageContract.Object,
new Mock<ILogger>().Object
);
} }
[SetUp] [SetUp]
public void SetUp() public void SetUp()
{ {
_salaryStorageContract.Reset(); _salaryStorageContract.Reset();
_orderStorageContract.Reset();
_postStorageContract.Reset(); _postStorageContract.Reset();
_masterStorageContract.Reset(); _masterStorageContract.Reset();
} }
[Test] [Test]
public void GetAllSalariesByPeriod_ReturnListOfRecords_Test() public void GetAllSalaries_ReturnListOfRecords_Test()
{ {
// Arrange //Arrange
var startDate = DateTime.UtcNow; var startDate = DateTime.UtcNow;
var endDate = DateTime.UtcNow.AddDays(1); var endDate = DateTime.UtcNow.AddDays(1);
var listOriginal = new List<SalaryDataModel> var listOriginal = new List<SalaryDataModel>()
{ {
new SalaryDataModel(Guid.NewGuid().ToString(), DateTime.UtcNow, 1000, 200), new(Guid.NewGuid().ToString(), DateTime.UtcNow, 10, 10),
new SalaryDataModel(Guid.NewGuid().ToString(), DateTime.UtcNow.AddDays(1), 1500, 300), new(Guid.NewGuid().ToString(), DateTime.UtcNow.AddDays(1), 14, 10),
new SalaryDataModel(Guid.NewGuid().ToString(), DateTime.UtcNow.AddDays(-1), 1200, 250) new(Guid.NewGuid().ToString(), DateTime.UtcNow.AddDays(-1), 30, 10),
}; };
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()))
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>())).Returns(listOriginal); .Returns(listOriginal);
//Act
// Act
var list = _salaryBusinessLogicContract.GetAllSalariesByPeriod(startDate, endDate); var list = _salaryBusinessLogicContract.GetAllSalariesByPeriod(startDate, endDate);
//Assert
// Assert
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Is.EquivalentTo(listOriginal)); Assert.That(list, Is.EquivalentTo(listOriginal));
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Once); _salaryStorageContract.Verify(x => x.GetList(startDate, endDate, null), Times.Once);
} }
[Test] [Test]
public void GetAllSalariesByPeriod_ReturnEmptyList_Test() public void GetAllSalaries_ReturnEmptyList_Test()
{ {
// Arrange //Arrange
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>())).Returns(new List<SalaryDataModel>()); _salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()))
.Returns([]);
// Act //Act
var list = _salaryBusinessLogicContract.GetAllSalariesByPeriod(DateTime.UtcNow, DateTime.UtcNow.AddDays(1)); var list = _salaryBusinessLogicContract.GetAllSalariesByPeriod(DateTime.UtcNow, DateTime.UtcNow.AddDays(1));
//Assert
// Assert
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list.Count, Is.EqualTo(0)); Assert.That(list, Has.Count.EqualTo(0));
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Once); _salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Once);
} }
[Test] [Test]
public void GetAllSalariesByPeriod_StorageThrowError_ThrowException_Test() public void GetAllSalaries_IncorrectDates_ThrowException_Test()
{ {
// Arrange //Arrange
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>())).Throws(new StorageException(new InvalidOperationException())); var dateTime = DateTime.UtcNow;
//Act&Assert
Assert.That(() => _salaryBusinessLogicContract.GetAllSalariesByPeriod(dateTime, dateTime),
Throws.TypeOf<IncorrectDatesException>());
Assert.That(() => _salaryBusinessLogicContract.GetAllSalariesByPeriod(dateTime, dateTime.AddSeconds(-1)),
Throws.TypeOf<IncorrectDatesException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Never);
}
// Act & Assert [Test]
Assert.That(() => _salaryBusinessLogicContract.GetAllSalariesByPeriod(DateTime.UtcNow, DateTime.UtcNow.AddDays(1)), public void GetAllSalaries_ReturnNull_ThrowException_Test()
{
//Act&Assert
Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriod(DateTime.UtcNow, DateTime.UtcNow.AddDays(1)),
Throws.TypeOf<NullListException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Once);
}
[Test]
public void GetAllSalaries_StorageThrowError_ThrowException_Test()
{
//Arrange
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()))
.Throws(new StorageException(new InvalidOperationException()));
//Act&Assert
Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriod(DateTime.UtcNow, DateTime.UtcNow.AddDays(1)),
Throws.TypeOf<StorageException>()); Throws.TypeOf<StorageException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Once); _salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Once);
} }
[Test] [Test]
public void GetAllSalariesByPeriodByMaster_ReturnListOfRecords_Test() public void GetAllSalariesByMaster_ReturnListOfRecords_Test()
{ {
// Arrange //Arrange
var startDate = DateTime.UtcNow; var startDate = DateTime.UtcNow;
var endDate = DateTime.UtcNow.AddDays(1); var endDate = DateTime.UtcNow.AddDays(1);
var masterId = Guid.NewGuid().ToString(); var masterId = Guid.NewGuid().ToString();
var listOriginal = new List<SalaryDataModel> var listOriginal = new List<SalaryDataModel>()
{ {
new SalaryDataModel(masterId, DateTime.UtcNow, 1000, 200), new(Guid.NewGuid().ToString(), DateTime.UtcNow, 10, 10),
new SalaryDataModel(masterId, DateTime.UtcNow.AddDays(1), 1500, 300) new(Guid.NewGuid().ToString(), DateTime.UtcNow.AddDays(1), 14, 10),
new(Guid.NewGuid().ToString(), DateTime.UtcNow.AddDays(-1), 30, 10),
}; };
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()))
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>())).Returns(listOriginal); .Returns(listOriginal);
//Act
// Act
var list = _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(startDate, endDate, masterId); var list = _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(startDate, endDate, masterId);
//Assert
// Assert
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Is.EquivalentTo(listOriginal)); Assert.That(list, Is.EquivalentTo(listOriginal));
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Once); _salaryStorageContract.Verify(x => x.GetList(startDate, endDate, masterId), Times.Once);
} }
[Test] [Test]
public void GetAllSalariesByPeriodByMaster_ReturnEmptyList_Test() public void GetAllSalariesByMaster_ReturnEmptyList_Test()
{ {
// Arrange //Arrange
var masterId = Guid.NewGuid().ToString(); _salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()))
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), masterId)).Returns(new List<SalaryDataModel>()); .Returns([]);
//Act
// Act var list = _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow,
var list = _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), masterId); DateTime.UtcNow.AddDays(1), Guid.NewGuid().ToString());
//Assert
// Assert
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list.Count, Is.EqualTo(0)); Assert.That(list, Has.Count.EqualTo(0));
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), masterId), Times.Once); _salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Once);
} }
[Test] [Test]
public void GetAllSalariesByPeriodByMaster_MasterIdIsNull_ThrowException_Test() public void GetAllSalariesByMaster_IncorrectDates_ThrowException_Test()
{ {
// Act & Assert //Arrange
Assert.That(() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), null), var dateTime = DateTime.UtcNow;
Throws.TypeOf<ArgumentNullException>()); //Act&Assert
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Never); Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(dateTime, dateTime,
Guid.NewGuid().ToString()), Throws.TypeOf<IncorrectDatesException>());
Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(dateTime, dateTime.AddSeconds(-1),
Guid.NewGuid().ToString()), Throws.TypeOf<IncorrectDatesException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Never);
} }
[Test] [Test]
public void GetAllSalariesByPeriodByMaster_MasterIdIsEmpty_ThrowException_Test() public void GetAllSalariesByMaster_MasterIdIsNUllOrEmpty_ThrowException_Test()
{ {
// Act & Assert //Act&Assert
Assert.That(() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), string.Empty), Assert.That(
Throws.TypeOf<ArgumentNullException>()); () => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow,
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Never); DateTime.UtcNow.AddDays(1), null), Throws.TypeOf<ArgumentNullException>());
Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow,
DateTime.UtcNow.AddDays(1), string.Empty), Throws.TypeOf<ArgumentNullException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Never);
} }
[Test] [Test]
public void CalculateSalaryByMonth_CalculateSalary_Test() public void GetAllSalariesByMaster_MasterIdIsNotGuid_ThrowException_Test()
{ {
// Arrange //Act&Assert
Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow,
DateTime.UtcNow.AddDays(1), "masterId"), Throws.TypeOf<ValidationException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Never);
}
[Test]
public void GetAllSalariesByMaster_ReturnNull_ThrowException_Test()
{
//Act&Assert
Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow,
DateTime.UtcNow.AddDays(1), Guid.NewGuid().ToString()), Throws.TypeOf<NullListException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Once);
}
[Test]
public void GetAllSalariesByMaster_StorageThrowError_ThrowException_Test()
{
//Arrange
_salaryStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()))
.Throws(new StorageException(new InvalidOperationException()));
//Act&Assert
Assert.That(
() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByMaster(DateTime.UtcNow,
DateTime.UtcNow.AddDays(1), Guid.NewGuid().ToString()), Throws.TypeOf<StorageException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()),
Times.Once);
}
[Test]
public void CalculateSalaryByMounth_CalculateSalary_Test()
{
//Arrange
var masterId = Guid.NewGuid().ToString(); var masterId = Guid.NewGuid().ToString();
var expectedSalary = 2000.0; var orderSum = 200.0;
var expectedPrize = 500.0; var postSalary = 2000.0;
_orderStorageContract.Setup(x => x.GetList())
var master = new MasterDataModel( .Returns([
id: masterId, new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial)
fio: "Иванов Иван Иванович", ]);
postId: Guid.NewGuid().ToString(), _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
birthDate: DateTime.Now.AddYears(-30), .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Plasterer, postSalary));
employmentDate: DateTime.Now.AddYears(-5), _masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
isDeleted: false It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
); .Returns([
new MasterDataModel(masterId, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
// Устанавливаем mock-поведение для метода GetList false)
_masterStorageContract.Setup(x => x.GetList(true, It.IsAny<string>(), null, null, null, null)) ]);
.Returns(new List<MasterDataModel> { master }); var sum = 0.0;
var expectedSum = postSalary + 500;
// Act _salaryStorageContract.Setup(x => x.AddElement(It.IsAny<SalaryDataModel>()))
.Callback((SalaryDataModel x) => { sum = x.Salary; });
//Act
_salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow); _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow);
//Assert
// Assert Assert.That(sum, Is.EqualTo(expectedSum));
_salaryStorageContract.Verify(x => x.AddElement(It.Is<SalaryDataModel>(s =>
s.MasterId == masterId &&
s.Salary == expectedSalary &&
s.Prize == expectedPrize)), Times.Once);
} }
[Test] [Test]
public void CalculateSalaryByMonth_MasterStorageThrowError_ThrowException_Test() public void CalculateSalaryByMounth_WithSeveralMasters_Test()
{ {
// Arrange //Arrange
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())).Throws(new StorageException(new InvalidOperationException())); var master1Id = Guid.NewGuid().ToString();
var master2Id = Guid.NewGuid().ToString();
var master3Id = Guid.NewGuid().ToString();
var list = new List<MasterDataModel>()
{
new MasterDataModel(master1Id, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false),
new MasterDataModel(master2Id, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false),
new MasterDataModel(master3Id, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false)
};
_orderStorageContract.Setup(x => x.GetList())
.Returns([
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial),
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial),
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial),
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial),
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial)
]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Plasterer, 2000));
_masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns(list);
//Act
_salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow);
//Assert
_salaryStorageContract.Verify(x => x.AddElement(It.IsAny<SalaryDataModel>()), Times.Exactly(list.Count));
}
// Act & Assert [Test]
public void CalculateSalaryByMounth_WithoitOrdersByMaster_Test()
{
//Arrange
var postSalary = 2000.0;
var masterId = Guid.NewGuid().ToString();
_orderStorageContract.Setup(x => x.GetList())
.Returns([]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Plasterer, postSalary));
_masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([
new MasterDataModel(masterId, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false)
]);
var sum = 0.0;
var expectedSum = postSalary + 500;
_salaryStorageContract.Setup(x => x.AddElement(It.IsAny<SalaryDataModel>()))
.Callback((SalaryDataModel x) => { sum = x.Salary; });
//Act
_salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow);
//Assert
Assert.That(sum, Is.EqualTo(expectedSum));
}
[Test]
public void CalculateSalaryByMounth_OrderStorageReturnNull_ThrowException_Test()
{
//Arrange
var masterId = Guid.NewGuid().ToString();
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Plasterer, 2000));
_masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([
new MasterDataModel(masterId, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false)
]);
//Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow),
Throws.TypeOf<NullListException>());
}
[Test]
public void CalculateSalaryByMounth_PostStorageReturnNull_ThrowException_Test()
{
//Arrange
var masterId = Guid.NewGuid().ToString();
_orderStorageContract.Setup(x => x.GetList())
.Returns([
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial)
]);
_masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([
new MasterDataModel(masterId, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false)
]);
//Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow),
Throws.TypeOf<NullListException>());
}
[Test]
public void CalculateSalaryByMounth_MasterStorageReturnNull_ThrowException_Test()
{
//Arrange
var masterId = Guid.NewGuid().ToString();
_orderStorageContract.Setup(x => x.GetList())
.Returns([
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial)
]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Plasterer, 2000));
//Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow),
Throws.TypeOf<NullListException>());
}
[Test]
public void CalculateSalaryByMounth_OrderStorageThrowException_ThrowException_Test()
{
//Arrange
var masterId = Guid.NewGuid().ToString();
_orderStorageContract.Setup(x => x.GetList())
.Throws(new StorageException(new InvalidOperationException()));
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Plasterer, 2000));
_masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([
new MasterDataModel(masterId, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false)
]);
//Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow), Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow),
Throws.TypeOf<StorageException>()); Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => x.GetElementById(It.IsAny<string>()), Times.Once);
} }
[Test] [Test]
public void CalculateSalaryByMonth_MasterDataInvalid_ThrowValidationException_Test() public void CalculateSalaryByMounth_PostStorageThrowException_ThrowException_Test()
{ {
// Arrange //Arrange
var masterId = Guid.NewGuid().ToString(); var masterId = Guid.NewGuid().ToString();
var master = new MasterDataModel( _orderStorageContract.Setup(x => x.GetList())
id: masterId, .Returns([
fio: "Invalid FIO", // Некорректное ФИО new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial)
postId: Guid.NewGuid().ToString(), ]);
birthDate: DateTime.Now.AddYears(-30), _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
employmentDate: DateTime.Now.AddYears(-5), .Throws(new StorageException(new InvalidOperationException()));
isDeleted: false _masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
); It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([
_masterStorageContract.Setup(x => x.GetElementById(masterId)).Returns(master); new MasterDataModel(masterId, "А А А", Guid.NewGuid().ToString(), DateTime.UtcNow.AddYears(-19), DateTime.UtcNow,
false)
// Act & Assert ]);
//Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow), Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<StorageException>());
_masterStorageContract.Verify(x => x.GetElementById(masterId), Times.Once); }
[Test]
public void CalculateSalaryByMounth_MasterStorageThrowException_ThrowException_Test()
{
//Arrange
var masterId = Guid.NewGuid().ToString();
_orderStorageContract.Setup(x => x.GetList())
.Returns([
new OrderDataModel(Guid.NewGuid().ToString(), DateTime.Now, StatusType.Ready, RoomType.Industrial)
]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Plasterer, 2000));
_masterStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Throws(new StorageException(new InvalidOperationException()));
//Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow),
Throws.TypeOf<StorageException>());
} }
} }

View File

@@ -9,7 +9,7 @@ using TwoFromTheCasketContratcs.Exceptions;
namespace TwoFromTheCasketTest.DataModelsTest; namespace TwoFromTheCasketTest.DataModelsTest;
[TestFixture] [TestFixture]
public class SalaryDataModellTests public class SalaryDataModelTests
{ {
[Test] [Test]
public void MasterIdIsNullOrEmptyTest() public void MasterIdIsNullOrEmptyTest()