Files
PIbd-23_Kadyshev_M.I_TwoFro…/TwoFromTheCasketContratcs/TwoFromTheCasketTest/StoragesContractsTests/MasterStorageContractTests.cs
2025-04-14 02:46:37 +04:00

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));
});
}
}