256 lines
10 KiB
C#
256 lines
10 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using TwoFromTheCasketContratcs.DataModels;
|
|
using TwoFromTheCasketContratcs.Exceptions;
|
|
using TwoFromTheCasketDatabase.Implementation;
|
|
using TwoFromTheCasketDatabase.Models;
|
|
|
|
namespace TwoFromTheCasketTest.StoragesContractsTests;
|
|
|
|
[TestFixture]
|
|
internal class MasterStorageContractTests : BaseStorageContractTest
|
|
{
|
|
private MasterStorageContract _masterStorageContract;
|
|
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_masterStorageContract = new MasterStorageContract(TwoFromTheCasketDbContext);
|
|
}
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
TwoFromTheCasketDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Masters\"CASCADE; ");
|
|
}
|
|
[Test]
|
|
public void Try_GetList_WhenHaveRecords_Test()
|
|
{
|
|
var master =
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1");
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2");
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3");
|
|
var list = _masterStorageContract.GetList();
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(3));
|
|
AssertElement(list.First(), master);
|
|
}
|
|
[Test]
|
|
public void Try_GetList_WhenNoRecords_Test()
|
|
{
|
|
var list = _masterStorageContract.GetList();
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Is.Empty);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetList_ByPostId_Test()
|
|
{
|
|
var postId = Guid.NewGuid().ToString();
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
|
postId);
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
|
postId);
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
|
postId);
|
|
var list = _masterStorageContract.GetList(postId: postId);
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(3));
|
|
Assert.That(list.All(x => x.PostId == postId));
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByBirthDate_Test()
|
|
{
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
|
birthDate: DateTime.UtcNow.AddYears(-25));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
|
birthDate: DateTime.UtcNow.AddYears(-21));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
|
birthDate: DateTime.UtcNow.AddYears(-20));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",
|
|
birthDate: DateTime.UtcNow.AddYears(-19));
|
|
|
|
var list = _masterStorageContract.GetList(fromBirthDate:
|
|
DateTime.UtcNow.AddYears(-21).AddMinutes(-1), toBirthDate:
|
|
DateTime.UtcNow.AddYears(-20).AddMinutes(1));
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(2));
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByEmploymentDate_Test()
|
|
{
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
|
employmentDate: DateTime.UtcNow.AddDays(-2));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
|
employmentDate: DateTime.UtcNow.AddDays(-1));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", employmentDate: DateTime.UtcNow.AddDays(1));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", employmentDate: DateTime.UtcNow.AddDays(2));
|
|
var list = _masterStorageContract.GetList(fromEmploymentDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-1),
|
|
toEmploymentDate: DateTime.UtcNow.AddDays(1).AddMinutes(1));
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(2));
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByAllParameters_Test()
|
|
{
|
|
var postId = Guid.NewGuid().ToString();
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", postId,
|
|
birthDate: DateTime.UtcNow.AddYears(-25), employmentDate: DateTime.UtcNow.AddDays(-2));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", postId,
|
|
birthDate: DateTime.UtcNow.AddYears(-22), employmentDate: DateTime.UtcNow.AddDays(-1));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", postId,
|
|
birthDate: DateTime.UtcNow.AddYears(-21), employmentDate: DateTime.UtcNow.AddDays(-1));
|
|
InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",birthDate: DateTime.UtcNow.AddYears(-20),
|
|
employmentDate: DateTime.UtcNow.AddDays(1));
|
|
var list = _masterStorageContract.GetList(postId: postId,
|
|
fromBirthDate: DateTime.UtcNow.AddYears(-21).AddMinutes(-1),
|
|
toBirthDate: DateTime.UtcNow.AddYears(-20).AddMinutes(1),
|
|
fromEmploymentDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-1),
|
|
toEmploymentDate: DateTime.UtcNow.AddDays(1).AddMinutes(1));
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(1));
|
|
}
|
|
[Test]
|
|
public void Try_GetElementById_WhenHaveRecord_Test()
|
|
{
|
|
var master = InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
AssertElement(_masterStorageContract.GetElementById(master.Id), master);
|
|
}
|
|
[Test]
|
|
public void Try_GetElementById_WhenNoRecord_Test()
|
|
{
|
|
Assert.That(() => _masterStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
|
}
|
|
[Test]
|
|
public void Try_GetElementByFIO_WhenHaveRecord_Test()
|
|
{
|
|
var master = InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
AssertElement(_masterStorageContract.GetElementByFIO(master.FIO), master);
|
|
}
|
|
[Test]
|
|
public void Try_GetElementByFIO_WhenNoRecord_Test()
|
|
{
|
|
Assert.That(() => _masterStorageContract.GetElementByFIO("New Fio"), Is.Null);
|
|
}
|
|
[Test]
|
|
public void Try_AddElement_Test()
|
|
{
|
|
var master = CreateModel(Guid.NewGuid().ToString());
|
|
_masterStorageContract.AddElement(master);
|
|
AssertElement(GetMasterFromDatabase(master.Id), master);
|
|
}
|
|
|
|
[Test]
|
|
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
|
|
{
|
|
var master = CreateModel(Guid.NewGuid().ToString());
|
|
InsertMasterToDatabaseAndReturn(master.Id);
|
|
Assert.That(() => _masterStorageContract.AddElement(master), Throws.TypeOf<ElementExistsException>());
|
|
}
|
|
|
|
[Test]
|
|
public void Try_UpdElement_Test()
|
|
{
|
|
var master = CreateModel(Guid.NewGuid().ToString(), "New Fio");
|
|
InsertMasterToDatabaseAndReturn(master.Id);
|
|
_masterStorageContract.UpdElement(master);
|
|
AssertElement(GetMasterFromDatabase(master.Id), master);
|
|
}
|
|
[Test]
|
|
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
|
|
{
|
|
Assert.That(() => _masterStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString())),
|
|
Throws.TypeOf<ElementNotFoundException>());
|
|
}
|
|
[Test]
|
|
public void Try_UpdElement_WhenNoRecordWasDeleted_Test()
|
|
{
|
|
var master = CreateModel(Guid.NewGuid().ToString());
|
|
InsertMasterToDatabaseAndReturn(master.Id, isDeleted: true);
|
|
Assert.That(() => _masterStorageContract.UpdElement(master), Throws.TypeOf<ElementNotFoundException>());
|
|
}
|
|
[Test]
|
|
public void Try_DelElement_Test()
|
|
{
|
|
var master = InsertMasterToDatabaseAndReturn(Guid.NewGuid().ToString());
|
|
_masterStorageContract.DelElement(master.Id);
|
|
var element = GetMasterFromDatabase(master.Id);
|
|
Assert.That(element, Is.Not.Null);
|
|
Assert.That(element.IsDeleted);
|
|
}
|
|
[Test]
|
|
public void Try_DelElement_WhenNoRecordWasDeleted_Test()
|
|
{
|
|
var master = CreateModel(Guid.NewGuid().ToString());
|
|
InsertMasterToDatabaseAndReturn(master.Id, isDeleted: true);
|
|
Assert.That(() => _masterStorageContract.DelElement(master.Id), Throws.TypeOf<ElementNotFoundException>());
|
|
}
|
|
[Test]
|
|
public void Try_DelElement_WhenNoRecordWithThisId_Test()
|
|
{
|
|
Assert.That(() => _masterStorageContract.DelElement(Guid.NewGuid().ToString()),
|
|
Throws.TypeOf<ElementNotFoundException>());
|
|
}
|
|
|
|
private Master InsertMasterToDatabaseAndReturn(string id, string fio = "test", string? postId = null, DateTime? birthDate = null, DateTime?
|
|
employmentDate = null, bool isDeleted = false)
|
|
{
|
|
var master = new Master()
|
|
{
|
|
Id = id,
|
|
FIO = fio,
|
|
PostId = postId ??
|
|
Guid.NewGuid().ToString(),
|
|
BirthDate = birthDate ?? DateTime.UtcNow.AddYears(-
|
|
20),
|
|
EmploymentDate = employmentDate ?? DateTime.UtcNow,
|
|
IsDeleted = isDeleted
|
|
};
|
|
TwoFromTheCasketDbContext.Masters.Add(master);
|
|
TwoFromTheCasketDbContext.SaveChanges();
|
|
return master;
|
|
}
|
|
private static void AssertElement(MasterDataModel? actual, Master expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
|
Assert.That(actual.PostId, Is.EqualTo(expected.PostId));
|
|
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
|
|
Assert.That(actual.BirthDate, Is.EqualTo(expected.BirthDate));
|
|
Assert.That(actual.EmploymentDate,
|
|
Is.EqualTo(expected.EmploymentDate));
|
|
Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted));
|
|
});
|
|
}
|
|
|
|
|
|
private Master? GetMasterFromDatabase(string id) => TwoFromTheCasketDbContext.Masters.FirstOrDefault(x => x.Id == id);
|
|
|
|
|
|
private static MasterDataModel CreateModel(string id, string fio = "fio", string? postId = null, DateTime? birthDate = null, DateTime? employmentDate = null,
|
|
bool isDeleted = false) => new(id, fio, postId ?? Guid.NewGuid().ToString(), birthDate ??DateTime.UtcNow.AddYears(-20), employmentDate ?? DateTime.UtcNow, isDeleted);
|
|
|
|
private static void AssertElement(Master? actual, MasterDataModel expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
|
Assert.That(actual.PostId, Is.EqualTo(expected.PostId));
|
|
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
|
|
Assert.That(actual.BirthDate, Is.EqualTo(expected.BirthDate));
|
|
Assert.That(actual.EmploymentDate, Is.EqualTo(expected.EmploymentDate));
|
|
Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted));
|
|
});
|
|
}
|
|
|
|
|
|
|
|
}
|