176 lines
6.5 KiB
C#
176 lines
6.5 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using SmallSoftwareContracts.DataModels;
|
|
using SmallSoftwareDatabase.Implementations;
|
|
using SmallSoftwareDatabase.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SmallSoftwareTests.StoragesContracts;
|
|
|
|
[TestFixture]
|
|
internal class SalaryStorageContractTests : BaseStorageContractTest
|
|
{
|
|
private SalaryStorageContract _salaryStorageContract;
|
|
private Worker _worker;
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_salaryStorageContract = new
|
|
SalaryStorageContract(SmallSoftwareDbContext);
|
|
_worker = InsertWorkerToDatabaseAndReturn();
|
|
}
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Salaries\" CASCADE; ");
|
|
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Workers\" CASCADE; ");
|
|
}
|
|
[Test]
|
|
public void Try_GetList_WhenHaveRecords_Test()
|
|
{
|
|
var salary = InsertSalaryToDatabaseAndReturn(_worker.Id,
|
|
workerSalary: 100);
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
|
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
|
10), DateTime.UtcNow.AddDays(10));
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(3));
|
|
AssertElement(list.First(), salary);
|
|
}
|
|
[Test]
|
|
public void Try_GetList_WhenNoRecords_Test()
|
|
{
|
|
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
|
10), DateTime.UtcNow.AddDays(10));
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Is.Empty);
|
|
}
|
|
[Test]
|
|
public void Try_GetList_OnlyInDatePeriod_Test()
|
|
{
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-2));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-1).AddMinutes(-5));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(1).AddMinutes(5));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-2));
|
|
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
|
1), DateTime.UtcNow.AddDays(1));
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(list, Has.Count.EqualTo(2));
|
|
});
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByWorker_Test()
|
|
{
|
|
var worker = InsertWorkerToDatabaseAndReturn("name 2");
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
|
InsertSalaryToDatabaseAndReturn(worker.Id);
|
|
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
|
1), DateTime.UtcNow.AddDays(1), _worker.Id);
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(list, Has.Count.EqualTo(2));
|
|
Assert.That(list.All(x => x.WorkerId == _worker.Id));
|
|
});
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByWorkerOnlyInDatePeriod_Test()
|
|
{
|
|
var worker = InsertWorkerToDatabaseAndReturn("name 2");
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-2));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
|
InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
|
InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
|
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
|
DateTime.UtcNow.AddDays(-2));
|
|
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
|
1), DateTime.UtcNow.AddDays(1), _worker.Id);
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(list, Has.Count.EqualTo(2));
|
|
Assert.That(list.All(x => x.WorkerId == _worker.Id));
|
|
});
|
|
}
|
|
[Test]
|
|
public void Try_AddElement_Test()
|
|
{
|
|
var salary = CreateModel(_worker.Id);
|
|
_salaryStorageContract.AddElement(salary);
|
|
AssertElement(GetSalaryFromDatabaseByWorkerId(_worker.Id), salary);
|
|
}
|
|
private Worker InsertWorkerToDatabaseAndReturn(string workerFIO = "fio")
|
|
{
|
|
var worker = new Worker()
|
|
{
|
|
Id = Guid.NewGuid().ToString(),
|
|
PostId =
|
|
Guid.NewGuid().ToString(),
|
|
FIO = workerFIO,
|
|
IsDeleted = false
|
|
};
|
|
SmallSoftwareDbContext.Workers.Add(worker);
|
|
SmallSoftwareDbContext.SaveChanges();
|
|
return worker;
|
|
}
|
|
private Salary InsertSalaryToDatabaseAndReturn(string workerId, double
|
|
workerSalary = 1, DateTime? salaryDate = null)
|
|
{
|
|
var salary = new Salary()
|
|
{
|
|
WorkerId = workerId,
|
|
WorkerSalary =
|
|
workerSalary,
|
|
SalaryDate = salaryDate ?? DateTime.UtcNow
|
|
};
|
|
SmallSoftwareDbContext.Salaries.Add(salary);
|
|
SmallSoftwareDbContext.SaveChanges();
|
|
return salary;
|
|
}
|
|
private static void AssertElement(SalaryDataModel? actual, Salary expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.WorkerId, Is.EqualTo(expected.WorkerId));
|
|
Assert.That(actual.Salary, Is.EqualTo(expected.WorkerSalary));
|
|
});
|
|
}
|
|
private static SalaryDataModel CreateModel(string workerId, double
|
|
workerSalary = 1, DateTime? salaryDate = null)
|
|
=> new(workerId, salaryDate ?? DateTime.UtcNow, workerSalary);
|
|
private Salary? GetSalaryFromDatabaseByWorkerId(string id) =>
|
|
SmallSoftwareDbContext.Salaries.FirstOrDefault(x => x.WorkerId == id);
|
|
private static void AssertElement(Salary? actual, SalaryDataModel expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.WorkerId, Is.EqualTo(expected.WorkerId));
|
|
Assert.That(actual.WorkerSalary, Is.EqualTo(expected.Salary));
|
|
});
|
|
}
|
|
|
|
}
|