diff --git a/SmallSoftwareProject/SmallSoftwareBusinessLogic/Implementations/PostBusinessLogicContract.cs b/SmallSoftwareProject/SmallSoftwareBusinessLogic/Implementations/PostBusinessLogicContract.cs index 8bf756f..72ba87c 100644 --- a/SmallSoftwareProject/SmallSoftwareBusinessLogic/Implementations/PostBusinessLogicContract.cs +++ b/SmallSoftwareProject/SmallSoftwareBusinessLogic/Implementations/PostBusinessLogicContract.cs @@ -24,7 +24,7 @@ postStorageContract, ILogger logger) : IPostBusinessLogicContract { _logger.LogInformation("GetAllPosts params: {onlyActive}", onlyActive); - return _postStorageContract.GetList(onlyActive) ?? throw new + return _postStorageContract.GetList() ?? throw new NullListException(); } public List GetAllDataOfPost(string postId) diff --git a/SmallSoftwareProject/SmallSoftwareContracts/DataModels/PostDataModel.cs b/SmallSoftwareProject/SmallSoftwareContracts/DataModels/PostDataModel.cs index cc966a6..39c92e3 100644 --- a/SmallSoftwareProject/SmallSoftwareContracts/DataModels/PostDataModel.cs +++ b/SmallSoftwareProject/SmallSoftwareContracts/DataModels/PostDataModel.cs @@ -5,30 +5,24 @@ using SmallSoftwareContracts.Infrastructure; namespace SmallSoftwareContracts.DataModels; -public class PostDataModel(string id, string postName, PostType - postType, double salary, bool isActual, DateTime changeDate) : IValidation +public class PostDataModel(string postId, string postName, PostType +postType, double salary) : IValidation { - public string Id { get; private set; } = id; + public string Id { get; private set; } = postId; public string PostName { get; private set; } = postName; public PostType PostType { get; private set; } = postType; public double Salary { get; private set; } = salary; - public bool IsActual { get; private set; } = isActual; - public DateTime ChangeDate { get; private set; } = changeDate; public void Validate() { if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); - if (!Id.IsGuid()) throw new ValidationException("The value in the field Id is not a unique identifier"); - if (PostName.IsEmpty()) throw new ValidationException("Field PostName is empty"); - if (PostType == PostType.None) throw new ValidationException("Field PostType is empty"); - if (Salary <= 0) throw new ValidationException("Field Salary is empty"); } -} +} \ No newline at end of file diff --git a/SmallSoftwareProject/SmallSoftwareContracts/DataModels/RequestDataModel.cs b/SmallSoftwareProject/SmallSoftwareContracts/DataModels/RequestDataModel.cs index e2cfa46..def0821 100644 --- a/SmallSoftwareProject/SmallSoftwareContracts/DataModels/RequestDataModel.cs +++ b/SmallSoftwareProject/SmallSoftwareContracts/DataModels/RequestDataModel.cs @@ -7,14 +7,14 @@ using System.Text.RegularExpressions; namespace SmallSoftwareContracts.DataModels; -public class RequestDataModel(string id, string workerId, string email, double sum, bool isCancel, List softwares) : IValidation +public class RequestDataModel(string id, string workerId, string email, double sum, bool isCancel, List installationRequests) : IValidation { public string Id { get; private set; } = id; public string WorkerId { get; private set; } = workerId; public string Email { get; private set; } = email; public double Sum { get; private set; } = sum; public bool IsCancel { get; private set; } = isCancel; - public List Softwares { get; private set; } = softwares; + public List Softwares { get; private set; } = installationRequests; public void Validate() { if (Id.IsEmpty()) diff --git a/SmallSoftwareProject/SmallSoftwareDatabase/Implementations/RequestStorageContract.cs b/SmallSoftwareProject/SmallSoftwareDatabase/Implementations/RequestStorageContract.cs index 0d34ccd..06249b9 100644 --- a/SmallSoftwareProject/SmallSoftwareDatabase/Implementations/RequestStorageContract.cs +++ b/SmallSoftwareProject/SmallSoftwareDatabase/Implementations/RequestStorageContract.cs @@ -17,6 +17,8 @@ internal class RequestStorageContract : IRequestStorageContract _dbContext = dbContext; var config = new MapperConfiguration(cfg => { + cfg.CreateMap(); + cfg.CreateMap(); cfg.CreateMap(); cfg.CreateMap() .ForMember(x => x.IsCancel, x => x.MapFrom(src => false)) diff --git a/SmallSoftwareProject/SmallSoftwareDatabase/Models/Request.cs b/SmallSoftwareProject/SmallSoftwareDatabase/Models/Request.cs index 64cd22f..e5788d7 100644 --- a/SmallSoftwareProject/SmallSoftwareDatabase/Models/Request.cs +++ b/SmallSoftwareProject/SmallSoftwareDatabase/Models/Request.cs @@ -10,7 +10,7 @@ namespace SmallSoftwareDatabase.Models; internal class Request { - public required string Id { get; set; } = Guid.NewGuid().ToString(); + public string Id { get; set; } = Guid.NewGuid().ToString(); public required string WorkerId { get; set; } public required string Email { get; set; } public double Sum { get; set; } diff --git a/SmallSoftwareProject/SmallSoftwareDatabase/Models/Software.cs b/SmallSoftwareProject/SmallSoftwareDatabase/Models/Software.cs index 59d8a36..29ea218 100644 --- a/SmallSoftwareProject/SmallSoftwareDatabase/Models/Software.cs +++ b/SmallSoftwareProject/SmallSoftwareDatabase/Models/Software.cs @@ -1,10 +1,5 @@ using SmallSoftwareContracts.Enums; -using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace SmallSoftwareDatabase.Models; diff --git a/SmallSoftwareProject/SmallSoftwareDatabase/Models/SoftwareHistory.cs b/SmallSoftwareProject/SmallSoftwareDatabase/Models/SoftwareHistory.cs index dcac6e4..5de34ca 100644 --- a/SmallSoftwareProject/SmallSoftwareDatabase/Models/SoftwareHistory.cs +++ b/SmallSoftwareProject/SmallSoftwareDatabase/Models/SoftwareHistory.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SmallSoftwareDatabase.Models; +namespace SmallSoftwareDatabase.Models; internal class SoftwareHistory { diff --git a/SmallSoftwareProject/SmallSoftwareDatabase/SmallSoftwareDatabase.csproj b/SmallSoftwareProject/SmallSoftwareDatabase/SmallSoftwareDatabase.csproj index e5dfe6d..fb35c3a 100644 --- a/SmallSoftwareProject/SmallSoftwareDatabase/SmallSoftwareDatabase.csproj +++ b/SmallSoftwareProject/SmallSoftwareDatabase/SmallSoftwareDatabase.csproj @@ -16,4 +16,9 @@ + + + + + diff --git a/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/PostBusinessLogicContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/PostBusinessLogicContractTests.cs index 472c266..d02e4d8 100644 --- a/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/PostBusinessLogicContractTests.cs +++ b/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/PostBusinessLogicContractTests.cs @@ -33,39 +33,33 @@ internal class PostBusinessLogicContractTests } [Test] public void GetAllPosts_ReturnListOfRecords_Test() - { - //Arrange + {//Arrange var listOriginal = new List() { new(Guid.NewGuid().ToString(),"name 1", PostType.SoftInstaller, - 10, true, DateTime.UtcNow), + 10), new(Guid.NewGuid().ToString(), "name 2", PostType.SoftInstaller, - 10, false, DateTime.UtcNow), + 10), new(Guid.NewGuid().ToString(), "name 3", PostType.SoftInstaller, - 10, true, DateTime.UtcNow), + 10), }; - _postStorageContract.Setup(x => - x.GetList(It.IsAny())).Returns(listOriginal); + _postStorageContract.Setup(x => x.GetList()).Returns(listOriginal); //Act - var listOnlyActive = _postBusinessLogicContract.GetAllPosts(true); - var listAll = _postBusinessLogicContract.GetAllPosts(false); + var list = _postBusinessLogicContract.GetAllPosts(); //Assert Assert.Multiple(() => { - Assert.That(listOnlyActive, Is.Not.Null); - Assert.That(listAll, Is.Not.Null); - Assert.That(listOnlyActive, Is.EquivalentTo(listOriginal)); - Assert.That(listAll, Is.EquivalentTo(listOriginal)); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.EquivalentTo(listOriginal)); }); - _postStorageContract.Verify(x => x.GetList(true), Times.Once); - _postStorageContract.Verify(x => x.GetList(false), Times.Once); + _postStorageContract.Verify(x => x.GetList(), Times.Once); } [Test] public void GetAllPosts_ReturnEmptyList_Test() { //Arrange _postStorageContract.Setup(x => - x.GetList(It.IsAny())).Returns([]); + x.GetList()).Returns([]); //Act var listOnlyActive = _postBusinessLogicContract.GetAllPosts(true); var listAll = _postBusinessLogicContract.GetAllPosts(false); @@ -77,7 +71,7 @@ internal class PostBusinessLogicContractTests Assert.That(listOnlyActive, Has.Count.EqualTo(0)); Assert.That(listAll, Has.Count.EqualTo(0)); }); - _postStorageContract.Verify(x => x.GetList(It.IsAny()), + _postStorageContract.Verify(x => x.GetList(), Times.Exactly(2)); } [Test] @@ -87,7 +81,7 @@ internal class PostBusinessLogicContractTests Assert.That(() => _postBusinessLogicContract.GetAllPosts(It.IsAny()), Throws.TypeOf()); - _postStorageContract.Verify(x => x.GetList(It.IsAny()), + _postStorageContract.Verify(x => x.GetList(), Times.Once); } [Test] @@ -95,13 +89,13 @@ internal class PostBusinessLogicContractTests { //Arrange _postStorageContract.Setup(x => - x.GetList(It.IsAny())).Throws(new StorageException(new + x.GetList()).Throws(new StorageException(new InvalidOperationException())); //Act&Assert Assert.That(() => _postBusinessLogicContract.GetAllPosts(It.IsAny()), Throws.TypeOf()); - _postStorageContract.Verify(x => x.GetList(It.IsAny()), + _postStorageContract.Verify(x => x.GetList(), Times.Once); } [Test] @@ -111,10 +105,8 @@ internal class PostBusinessLogicContractTests var postId = Guid.NewGuid().ToString(); var listOriginal = new List() { - new(postId, "name 1", PostType.SoftInstaller, 10, true, - DateTime.UtcNow), - new(postId, "name 2", PostType.SoftInstaller, 10, false, - DateTime.UtcNow) + new(postId, "name 1", PostType.SoftInstaller, 10), + new(postId, "name 2", PostType.SoftInstaller, 10) }; _postStorageContract.Setup(x => x.GetPostWithHistory(It.IsAny())).Returns(listOriginal); @@ -191,8 +183,7 @@ internal class PostBusinessLogicContractTests { //Arrange var id = Guid.NewGuid().ToString(); - var record = new PostDataModel(id, "name", PostType.SoftInstaller, 10, - true, DateTime.UtcNow); + var record = new PostDataModel(id, "name", PostType.SoftInstaller, 10); _postStorageContract.Setup(x => x.GetElementById(id)).Returns(record); //Act @@ -209,7 +200,7 @@ internal class PostBusinessLogicContractTests //Arrange var postName = "name"; var record = new PostDataModel(Guid.NewGuid().ToString(), postName, - PostType.SoftInstaller, 10, true, DateTime.UtcNow); + PostType.SoftInstaller, 10); _postStorageContract.Setup(x => x.GetElementByName(postName)).Returns(record); //Act @@ -284,14 +275,13 @@ internal class PostBusinessLogicContractTests //Arrange var flag = false; var record = new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.Supervisor, 10, true, DateTime.UtcNow.AddDays(-1)); + PostType.Supervisor, 10); _postStorageContract.Setup(x => x.AddElement(It.IsAny())) .Callback((PostDataModel x) => { flag = x.Id == record.Id && x.PostName == - record.PostName && x.PostType == record.PostType && x.Salary == record.Salary && - x.ChangeDate == record.ChangeDate; + record.PostName && x.PostType == record.PostType && x.Salary == record.Salary; }); //Act _postBusinessLogicContract.InsertPost(record); @@ -310,7 +300,7 @@ internal class PostBusinessLogicContractTests //Act&Assert Assert.That(() => _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", - PostType.Supervisor, 10, true, DateTime.UtcNow)), + PostType.Supervisor, 10)), Throws.TypeOf()); _postStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); @@ -329,7 +319,7 @@ internal class PostBusinessLogicContractTests { //Act&Assert Assert.That(() => _postBusinessLogicContract.InsertPost(new - PostDataModel("id", "name", PostType.Supervisor, 10, true, DateTime.UtcNow)), + PostDataModel("id", "name", PostType.Supervisor, 10)), Throws.TypeOf()); _postStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Never); @@ -344,7 +334,7 @@ internal class PostBusinessLogicContractTests //Act&Assert Assert.That(() => _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", - PostType.Supervisor, 10, true, DateTime.UtcNow)), + PostType.Supervisor, 10)), Throws.TypeOf()); _postStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); @@ -355,14 +345,13 @@ internal class PostBusinessLogicContractTests //Arrange var flag = false; var record = new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.Supervisor, 10, true, DateTime.UtcNow.AddDays(-1)); + PostType.Supervisor, 10); _postStorageContract.Setup(x => x.UpdElement(It.IsAny())) .Callback((PostDataModel x) => { flag = x.Id == record.Id && x.PostName == - record.PostName && x.PostType == record.PostType && x.Salary == record.Salary && - x.ChangeDate == record.ChangeDate; + record.PostName && x.PostType == record.PostType && x.Salary == record.Salary; }); //Act _postBusinessLogicContract.UpdatePost(record); @@ -381,7 +370,7 @@ internal class PostBusinessLogicContractTests //Act&Assert Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", - PostType.Supervisor, 10, true, DateTime.UtcNow)), + PostType.Supervisor, 10)), Throws.TypeOf()); _postStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); @@ -396,7 +385,7 @@ internal class PostBusinessLogicContractTests //Act&Assert Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "anme", - PostType.Supervisor, 10, true, DateTime.UtcNow)), + PostType.Supervisor, 10)), Throws.TypeOf()); _postStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); @@ -415,7 +404,7 @@ internal class PostBusinessLogicContractTests { //Act&Assert Assert.That(() => _postBusinessLogicContract.UpdatePost(new - PostDataModel("id", "name", PostType.Supervisor, 10, true, DateTime.UtcNow)), + PostDataModel("id", "name", PostType.Supervisor, 10)), Throws.TypeOf()); _postStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); @@ -430,7 +419,7 @@ internal class PostBusinessLogicContractTests //Act&Assert Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", - PostType.Supervisor, 10, true, DateTime.UtcNow)), + PostType.Supervisor, 10)), Throws.TypeOf()); _postStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); diff --git a/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/RequestBusinessLogicContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/RequestBusinessLogicContractTests.cs index abc911a..8154818 100644 --- a/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/RequestBusinessLogicContractTests.cs +++ b/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/RequestBusinessLogicContractTests.cs @@ -34,7 +34,7 @@ internal class RequestBusinessLogicContractTests var date = DateTime.UtcNow; var listOriginal = new List() { - new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5)]), + new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)]), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), }; _requestStorageContract.Setup(x => x.GetList(It.IsAny(), @@ -112,7 +112,7 @@ internal class RequestBusinessLogicContractTests var workerId = Guid.NewGuid().ToString(); var listOriginal = new List() { - new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5)]), + new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)]), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), }; _requestStorageContract.Setup(x => x.GetList(It.IsAny(), @@ -229,7 +229,7 @@ internal class RequestBusinessLogicContractTests var softwareId = Guid.NewGuid().ToString(); var listOriginal = new List() { - new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]), + new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), }; @@ -343,7 +343,7 @@ internal class RequestBusinessLogicContractTests { //Arrange var id = Guid.NewGuid().ToString(); - var record = new RequestDataModel(id, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]); + var record = new RequestDataModel(id, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]); _requestStorageContract.Setup(x => x.GetElementById(id)).Returns(record); //Act @@ -405,7 +405,7 @@ internal class RequestBusinessLogicContractTests //Arrange var flag = false; var record = new RequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "valid.email@example.com", 10, false, - [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]); + [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]); _requestStorageContract.Setup(x => x.AddElement(It.IsAny())) .Callback((RequestDataModel x) => { @@ -435,7 +435,7 @@ internal class RequestBusinessLogicContractTests //Act&Assert Assert.That(() => _requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10,false, - [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf()); + [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)])), Throws.TypeOf()); _requestStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); } [Test] @@ -464,7 +464,7 @@ internal class RequestBusinessLogicContractTests InvalidOperationException())); //Act&Assert Assert.That(() => - _requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf()); + _requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)])), Throws.TypeOf()); _requestStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); } diff --git a/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/SalaryBusinessLogicContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/SalaryBusinessLogicContractTests.cs index 1b874ef..edf0228 100644 --- a/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/SalaryBusinessLogicContractTests.cs +++ b/SmallSoftwareProject/SmallSoftwareTests/BusinessLogicsContractsTests/SalaryBusinessLogicContractTests.cs @@ -243,7 +243,7 @@ internal class SalaryBusinessLogicContractTests .Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), requestSum, false, [])]); _postStorageContract.Setup(x => x.GetElementById(It.IsAny())) .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.SoftInstaller, postSalary, true, DateTime.UtcNow)); + PostType.SoftInstaller, postSalary)); _workerStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -291,7 +291,7 @@ internal class SalaryBusinessLogicContractTests 1, false, [])]); _postStorageContract.Setup(x => x.GetElementById(It.IsAny())) .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); + PostType.SoftInstaller, 2000)); _workerStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -313,7 +313,7 @@ internal class SalaryBusinessLogicContractTests .Returns([]); _postStorageContract.Setup(x => x.GetElementById(It.IsAny())) .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.SoftInstaller, postSalary, true, DateTime.UtcNow)); + PostType.SoftInstaller, postSalary)); _workerStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -340,7 +340,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); var workerId = Guid.NewGuid().ToString(); _postStorageContract.Setup(x => x.GetElementById(It.IsAny())) .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); + PostType.SoftInstaller, 2000)); _workerStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -382,7 +382,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); workerId, Guid.NewGuid().ToString(), 200, false, [])]); _postStorageContract.Setup(x => x.GetElementById(It.IsAny())) .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); + PostType.SoftInstaller, 2000)); //Act&Assert Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow), @@ -400,7 +400,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); InvalidOperationException())); _postStorageContract.Setup(x => x.GetElementById(It.IsAny())) .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); + PostType.SoftInstaller, 2000)); _workerStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -445,7 +445,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); .Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), 200, false, [])]); _postStorageContract.Setup(x => x.GetElementById(It.IsAny())) .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", - PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); + PostType.SoftInstaller, 2000)); _workerStorageContract.Setup(x => x.GetList(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) diff --git a/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/InstallationRequestDataModelTests.cs b/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/InstallationRequestDataModelTests.cs index 5338165..626afc3 100644 --- a/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/InstallationRequestDataModelTests.cs +++ b/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/InstallationRequestDataModelTests.cs @@ -17,11 +17,11 @@ internal class InstallationRequestDataModelTests public void SoftwareIdIsNullOrEmptyTest() { var installationRequest = CreateDataModel(null, Guid.NewGuid().ToString(), - 10); + 10, 10); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); installationRequest = CreateDataModel(string.Empty, - Guid.NewGuid().ToString(), 10); + Guid.NewGuid().ToString(), 10, 10); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); } @@ -29,7 +29,7 @@ internal class InstallationRequestDataModelTests public void SoftwareIdIsNotGuidTest() { var installationRequest = CreateDataModel("softwareId", - Guid.NewGuid().ToString(), 10); + Guid.NewGuid().ToString(), 10, 10); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); } @@ -37,11 +37,11 @@ internal class InstallationRequestDataModelTests public void RequestIdIsNullOrEmptyTest() { var installationRequest = CreateDataModel(Guid.NewGuid().ToString(), null, - 10); + 10, 10); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); installationRequest = CreateDataModel(string.Empty, - Guid.NewGuid().ToString(), 10); + Guid.NewGuid().ToString(), 10, 10); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); } @@ -49,7 +49,7 @@ internal class InstallationRequestDataModelTests public void RequestIdIsNotGuidTest() { var installationRequest = CreateDataModel(Guid.NewGuid().ToString(), - "requestId", 10); + "requestId", 10, 10); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); } @@ -57,11 +57,11 @@ internal class InstallationRequestDataModelTests public void CountIsLessOrZeroTest() { var installationRequest = CreateDataModel(Guid.NewGuid().ToString(), - Guid.NewGuid().ToString(), 0); + Guid.NewGuid().ToString(), 0, 0); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); installationRequest = CreateDataModel(Guid.NewGuid().ToString(), - Guid.NewGuid().ToString(), -10); + Guid.NewGuid().ToString(), -10, -20); Assert.That(() => installationRequest.Validate(), Throws.TypeOf()); } @@ -71,7 +71,8 @@ internal class InstallationRequestDataModelTests var softwareId = Guid.NewGuid().ToString(); var requestId = Guid.NewGuid().ToString(); var count = 10; - var installationRequest = CreateDataModel(softwareId, requestId, count); + var price = 10; + var installationRequest = CreateDataModel(softwareId, requestId, count, price); Assert.That(() => installationRequest.Validate(), Throws.Nothing); Assert.Multiple(() => { @@ -81,6 +82,6 @@ internal class InstallationRequestDataModelTests }); } private static InstallationRequestDataModel CreateDataModel(string? softwareId, string? - requestId, int count) => - new(softwareId, requestId, count); + requestId, int count, double price) => + new(softwareId, requestId, count, price); } diff --git a/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/PostDataModelTests.cs b/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/PostDataModelTests.cs index f455152..b4f636b 100644 --- a/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/PostDataModelTests.cs +++ b/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/PostDataModelTests.cs @@ -80,12 +80,10 @@ internal class PostDataModelTests Assert.That(post.PostName, Is.EqualTo(postName)); Assert.That(post.PostType, Is.EqualTo(postType)); Assert.That(post.Salary, Is.EqualTo(salary)); - Assert.That(post.IsActual, Is.EqualTo(isActual)); - Assert.That(post.ChangeDate, Is.EqualTo(changeDate)); }); } private static PostDataModel CreateDataModel(string? id, string? postName, PostType postType, double salary, bool isActual, DateTime changeDate) => - new (id, postName, postType, salary, isActual, changeDate); + new (id, postName, postType, salary); } diff --git a/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/RequestDataModelTests.cs b/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/RequestDataModelTests.cs index ecca055..22a01e0 100644 --- a/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/RequestDataModelTests.cs +++ b/SmallSoftwareProject/SmallSoftwareTests/DataModelsTests/RequestDataModelTests.cs @@ -98,7 +98,7 @@ internal class RequestDataModelTests new(id, workerId, email, sum, isCancel, softwares); private static List CreateSubDataModel() => - [new InstallationRequestDataModel(Guid.NewGuid().ToString(), "SoftwareName", 1)]; + [new InstallationRequestDataModel(Guid.NewGuid().ToString(), "SoftwareName", 1, 10)]; } diff --git a/SmallSoftwareProject/SmallSoftwareTests/Infrastructure/ConfigurationDatabaseTest.cs b/SmallSoftwareProject/SmallSoftwareTests/Infrastructure/ConfigurationDatabaseTest.cs new file mode 100644 index 0000000..3f6e9dc --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/Infrastructure/ConfigurationDatabaseTest.cs @@ -0,0 +1,14 @@ +using SmallSoftwareContracts.Infrastructure; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SmallSoftwareTests.Infrastructure; + +internal class ConfigurationDatabaseTest : IConfigurationDatabase +{ + public string ConnectionString => "Host=127.0.0.1;Port=5432;Database=SmallSoftwareTest;Username=postgres;Password=postgres;"; + +} diff --git a/SmallSoftwareProject/SmallSoftwareTests/SmallSoftwareTests.csproj b/SmallSoftwareProject/SmallSoftwareTests/SmallSoftwareTests.csproj index 4a83b5e..5321364 100644 --- a/SmallSoftwareProject/SmallSoftwareTests/SmallSoftwareTests.csproj +++ b/SmallSoftwareProject/SmallSoftwareTests/SmallSoftwareTests.csproj @@ -20,6 +20,7 @@ + diff --git a/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/BaseStorageContractTest.cs b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/BaseStorageContractTest.cs new file mode 100644 index 0000000..0e0ec82 --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/BaseStorageContractTest.cs @@ -0,0 +1,22 @@ +using SmallSoftwareTests.Infrastructure; +using SmallSoftwareDatabase; +namespace SmallSoftwareTests.StoragesContracts; + +internal abstract class BaseStorageContractTest +{ + protected SmallSoftwareDbContext SmallSoftwareDbContext { get; private set; } + [OneTimeSetUp] + public void OneTimeSetUp() + { + SmallSoftwareDbContext = new SmallSoftwareDbContext(new ConfigurationDatabaseTest()); + SmallSoftwareDbContext.Database.EnsureDeleted(); + SmallSoftwareDbContext.Database.EnsureCreated(); + } + [OneTimeTearDown] + public void OneTimeTearDown() + { + SmallSoftwareDbContext.Database.EnsureDeleted(); + SmallSoftwareDbContext.Dispose(); + } + +} diff --git a/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/ManufacturerStorageContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/ManufacturerStorageContractTests.cs new file mode 100644 index 0000000..a2455b8 --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/ManufacturerStorageContractTests.cs @@ -0,0 +1,254 @@ +using Microsoft.EntityFrameworkCore; +using SmallSoftwareContracts.DataModels; +using SmallSoftwareContracts.Exceptions; +using SmallSoftwareDatabase.Implementations; +using SmallSoftwareDatabase.Models; + +namespace SmallSoftwareTests.StoragesContracts; + +[TestFixture] +internal class ManufacturerStorageContractTests : BaseStorageContractTest +{ + private ManufacturerStorageContract _manufacturerStorageContract; + [SetUp] + public void SetUp() + { + _manufacturerStorageContract = new + ManufacturerStorageContract(SmallSoftwareDbContext); + } + [TearDown] + public void TearDown() + { + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Softwares\" CASCADE; "); + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Manufacturers\" CASCADE;"); + } + [Test] + public void Try_GetList_WhenHaveRecords_Test() + { + var manufacturer = + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(), + "name 2"); + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(), + "name 3"); + var list = _manufacturerStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + AssertElement(list.First(x => x.Id == manufacturer.Id), manufacturer); + } + [Test] + public void Try_GetList_WhenNoRecords_Test() + { + var list = _manufacturerStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.Empty); + } + [Test] + public void Try_GetElementById_WhenHaveRecord_Test() + { + var manufacturer = + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + AssertElement(_manufacturerStorageContract.GetElementById(manufacturer.Id), + manufacturer); + } + [Test] + public void Try_GetElementById_WhenNoRecord_Test() + { + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + Assert.That(() => + _manufacturerStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + } + [Test] + public void Try_GetElementByName_WhenHaveRecord_Test() + { + var manufacturer = + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + AssertElement(_manufacturerStorageContract.GetElementByName(manufacturer.ManufacturerName), manufacturer); + } + [Test] + public void Try_GetElementByName_WhenNoRecord_Test() + { + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + Assert.That(() => + _manufacturerStorageContract.GetElementByName("name"), Is.Null); + } + [Test] + public void Try_GetElementByOldName_WhenHaveRecord_Test() + { + var manufacturer = + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + AssertElement(_manufacturerStorageContract.GetElementByOldName(manufacturer + .PrevManufacturerName!), manufacturer); + AssertElement(_manufacturerStorageContract.GetElementByOldName(manufacturer + .PrevPrevManufacturerName!), manufacturer); + } + [Test] + public void Try_GetElementByOldName_WhenNoRecord_Test() + { + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + Assert.That(() => + _manufacturerStorageContract.GetElementByOldName("name"), Is.Null); + } + [Test] + public void Try_AddElement_Test() + { + var manufacturer = CreateModel(Guid.NewGuid().ToString()); + _manufacturerStorageContract.AddElement(manufacturer); + AssertElement(GetManufacturerFromDatabase(manufacturer.Id), + manufacturer); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSameId_Test() + { + var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name unique"); + InsertManufacturerToDatabaseAndReturn(manufacturer.Id); + Assert.That(() => + _manufacturerStorageContract.AddElement(manufacturer), + Throws.TypeOf()); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSameManufacturerName_Test() + { + var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name unique"); + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(), + manufacturerName: manufacturer.ManufacturerName); + Assert.That(() => + _manufacturerStorageContract.AddElement(manufacturer), + Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_Test() + { + var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name new", + "test", "prev"); + InsertManufacturerToDatabaseAndReturn(manufacturer.Id, + manufacturerName: manufacturer.PrevManufacturerName!, prevManufacturerName: + manufacturer.PrevPrevManufacturerName!); + _manufacturerStorageContract.UpdElement(CreateModel(manufacturer.Id, + "name new", "some name", "some name")); + AssertElement(GetManufacturerFromDatabase(manufacturer.Id), + manufacturer); + } + [Test] + public void Try_UpdElement_WhenNoChangeManufacturerName_Test() + { + var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name new", + "test", "prev"); + InsertManufacturerToDatabaseAndReturn(manufacturer.Id, + manufacturerName: manufacturer.ManufacturerName!, prevManufacturerName: + manufacturer.PrevManufacturerName!, prevPrevManufacturerName: + manufacturer.PrevPrevManufacturerName!); + _manufacturerStorageContract.UpdElement(manufacturer); + AssertElement(GetManufacturerFromDatabase(manufacturer.Id), + manufacturer); + } + [Test] + public void Try_UpdElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _manufacturerStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString())), + Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_WhenHaveRecordWithSameManufacturerName_Test() + { + var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name unique"); + InsertManufacturerToDatabaseAndReturn(manufacturer.Id, + manufacturerName: "some name"); + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(), + manufacturerName: manufacturer.ManufacturerName); + Assert.That(() => + _manufacturerStorageContract.UpdElement(manufacturer), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_WhenNoSoftwares_Test() + { + var manufacturer = + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + _manufacturerStorageContract.DelElement(manufacturer.Id); + var element = GetManufacturerFromDatabase(manufacturer.Id); + Assert.That(element, Is.Null); + } + [Test] + public void Try_DelElement_WhenHaveSoftwares_Test() + { + var manufacturer = + InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString()); + SmallSoftwareDbContext.Softwares.Add(new Software() + { + Id = + Guid.NewGuid().ToString(), + SoftwareName = "name", + ManufacturerId = + manufacturer.Id, + Price = 10, + IsDeleted = false + }); + SmallSoftwareDbContext.SaveChanges(); + Assert.That(() => + _manufacturerStorageContract.DelElement(manufacturer.Id), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _manufacturerStorageContract.DelElement(Guid.NewGuid().ToString()), + Throws.TypeOf()); + } + private Manufacturer InsertManufacturerToDatabaseAndReturn(string id, + string manufacturerName = "test", string prevManufacturerName = "prev", string + prevPrevManufacturerName = "prevPrev") + { + var manufacturer = new Manufacturer() + { + Id = id, + ManufacturerName = + manufacturerName, + PrevManufacturerName = prevManufacturerName, + PrevPrevManufacturerName = prevPrevManufacturerName + }; + SmallSoftwareDbContext.Manufacturers.Add(manufacturer); + SmallSoftwareDbContext.SaveChanges(); + return manufacturer; + } + private static void AssertElement(ManufacturerDataModel? actual, + Manufacturer expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.ManufacturerName, + Is.EqualTo(expected.ManufacturerName)); + Assert.That(actual.PrevManufacturerName, + Is.EqualTo(expected.PrevManufacturerName)); + Assert.That(actual.PrevPrevManufacturerName, + Is.EqualTo(expected.PrevPrevManufacturerName)); + }); + } + private static ManufacturerDataModel CreateModel(string id, string + manufacturerName = "test", string prevManufacturerName = "prev", string + prevPrevManufacturerName = "prevPrev") + => new(id, manufacturerName, prevManufacturerName, + prevPrevManufacturerName); + private Manufacturer? GetManufacturerFromDatabase(string id) => + SmallSoftwareDbContext.Manufacturers.FirstOrDefault(x => x.Id == id); + private static void AssertElement(Manufacturer? actual, + ManufacturerDataModel expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.ManufacturerName, + Is.EqualTo(expected.ManufacturerName)); + Assert.That(actual.PrevManufacturerName, + Is.EqualTo(expected.PrevManufacturerName)); + Assert.That(actual.PrevPrevManufacturerName, + Is.EqualTo(expected.PrevPrevManufacturerName)); + }); + } +} + diff --git a/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/PostStorageContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/PostStorageContractTests.cs new file mode 100644 index 0000000..a1917ed --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/PostStorageContractTests.cs @@ -0,0 +1,287 @@ +using Microsoft.EntityFrameworkCore; +using SmallSoftwareContracts.DataModels; +using SmallSoftwareContracts.Enums; +using SmallSoftwareContracts.Exceptions; +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 PostStorageContractTests : BaseStorageContractTest +{ + private PostStorageContract _postStorageContract; + [SetUp] + public void SetUp() + { + _postStorageContract = new PostStorageContract(SmallSoftwareDbContext); + } + [TearDown] + public void TearDown() + { + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Posts\" CASCADE; "); + } + [Test] + public void Try_GetList_WhenHaveRecords_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 2"); + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 3"); + var list = _postStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + AssertElement(list.First(x => x.Id == post.PostId), post); + } + [Test] + public void Try_GetList_WhenNoRecords_Test() + { + var list = _postStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.Empty); + } + [Test] + public void Try_GetPostWithHistory_WhenHaveRecords_Test() + { + var postId = Guid.NewGuid().ToString(); + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1", + isActual: true); + InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true); + InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false); + var list = _postStorageContract.GetPostWithHistory(postId); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(2)); + } + [Test] + public void Try_GetPostWithHistory_WhenNoRecords_Test() + { + var postId = Guid.NewGuid().ToString(); + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1", + isActual: true); + InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true); + InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false); + var list = + _postStorageContract.GetPostWithHistory(Guid.NewGuid().ToString()); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(0)); + } + [Test] + public void Try_GetElementById_WhenHaveRecord_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString()); + AssertElement(_postStorageContract.GetElementById(post.PostId), + post); + } + [Test] + public void Try_GetElementById_WhenNoRecord_Test() + { + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString()); + Assert.That(() => + _postStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + } + [Test] + public void Try_GetElementById_WhenRecordHasDeleted_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), + isActual: false); + Assert.That(() => _postStorageContract.GetElementById(post.PostId), + Is.Null); + } + [Test] + public void Try_GetElementById_WhenTrySearchById_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString()); + Assert.That(() => _postStorageContract.GetElementById(post.Id), + Is.Null); + } + [Test] + public void Try_GetElementByName_WhenHaveRecord_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString()); + AssertElement(_postStorageContract.GetElementByName(post.PostName), + post); + } + [Test] + public void Try_GetElementByName_WhenNoRecord_Test() + { + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString()); + Assert.That(() => _postStorageContract.GetElementByName("name"), + Is.Null); + } + [Test] + public void Try_GetElementByName_WhenRecordHasDeleted_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), + isActual: false); + Assert.That(() => _postStorageContract.GetElementById(post.PostName), + Is.Null); + } + [Test] + public void Try_AddElement_Test() + { + var post = CreateModel(Guid.NewGuid().ToString()); + _postStorageContract.AddElement(post); + AssertElement(GetPostFromDatabaseByPostId(post.Id), post); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSameName_Test() + { + var post = CreateModel(Guid.NewGuid().ToString(), "name unique"); + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), postName: + post.PostName, isActual: true); + Assert.That(() => _postStorageContract.AddElement(post), + Throws.TypeOf()); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSamePostId_Test() + { + var post = CreateModel(Guid.NewGuid().ToString()); + InsertPostToDatabaseAndReturn(post.Id, isActual: true); + Assert.That(() => _postStorageContract.AddElement(post), + Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_Test() + { + var post = CreateModel(Guid.NewGuid().ToString()); + InsertPostToDatabaseAndReturn(post.Id, isActual: true); + _postStorageContract.UpdElement(post); + var posts = SmallSoftwareDbContext.Posts.Where(x => x.PostId == + post.Id).OrderByDescending(x => x.ChangeDate); + Assert.That(posts.Count(), Is.EqualTo(2)); + AssertElement(posts.First(), CreateModel(post.Id)); + AssertElement(posts.Last(), CreateModel(post.Id)); + } + [Test] + public void Try_UpdElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _postStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString())), + Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_WhenHaveRecordWithSameName_Test() + { + var post = CreateModel(Guid.NewGuid().ToString(), "New Name"); + InsertPostToDatabaseAndReturn(post.Id, postName: "name"); + InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), postName: + post.PostName); + Assert.That(() => _postStorageContract.UpdElement(post), + Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_WhenRecordWasDeleted_Test() + { + var post = CreateModel(Guid.NewGuid().ToString()); + InsertPostToDatabaseAndReturn(post.Id, isActual: false); + Assert.That(() => _postStorageContract.UpdElement(post), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), + isActual: true); + _postStorageContract.DelElement(post.PostId); + var element = GetPostFromDatabaseByPostId(post.PostId); + Assert.Multiple(() => + { + Assert.That(element, Is.Not.Null); + Assert.That(!element!.IsActual); + }); + } + [Test] + public void Try_DelElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _postStorageContract.DelElement(Guid.NewGuid().ToString()), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_WhenRecordWasDeleted_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), + isActual: false); + Assert.That(() => _postStorageContract.DelElement(post.PostId), + Throws.TypeOf()); + } + [Test] + public void Try_ResElement_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), + isActual: false); + _postStorageContract.ResElement(post.PostId); + var element = GetPostFromDatabaseByPostId(post.PostId); + Assert.Multiple(() => + { + Assert.That(element, Is.Not.Null); + Assert.That(element!.IsActual); + }); + } + [Test] + public void Try_ResElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _postStorageContract.ResElement(Guid.NewGuid().ToString()), + Throws.TypeOf()); + } + [Test] + public void Try_ResElement_WhenRecordNotWasDeleted_Test() + { + var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), + isActual: true); + Assert.That(() => _postStorageContract.ResElement(post.PostId), + Throws.Nothing); + } + private Post InsertPostToDatabaseAndReturn(string id, string postName = + "test", PostType postType = PostType.SoftInstaller, double salary = 10, bool isActual + = true, DateTime? changeDate = null) + { + var post = new Post() + { + Id = Guid.NewGuid().ToString(), + PostId = id, + PostName = postName, + PostType = postType, + Salary = salary, + IsActual = isActual, + ChangeDate = changeDate ?? DateTime.UtcNow + }; + SmallSoftwareDbContext.Posts.Add(post); + SmallSoftwareDbContext.SaveChanges(); + return post; + } + private static void AssertElement(PostDataModel? actual, Post expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.PostId)); + Assert.That(actual.PostName, Is.EqualTo(expected.PostName)); + Assert.That(actual.PostType, Is.EqualTo(expected.PostType)); + Assert.That(actual.Salary, Is.EqualTo(expected.Salary)); + }); + } + private static PostDataModel CreateModel(string postId, string postName = + "test", PostType postType = PostType.SoftInstaller, double salary = 10) + => new(postId, postName, postType, salary); + private Post? GetPostFromDatabaseByPostId(string id) => + SmallSoftwareDbContext.Posts.Where(x => x.PostId == id).OrderByDescending(x => + x.ChangeDate).FirstOrDefault(); + private static void AssertElement(Post? actual, PostDataModel expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.PostId, Is.EqualTo(expected.Id)); + Assert.That(actual.PostName, Is.EqualTo(expected.PostName)); + Assert.That(actual.PostType, Is.EqualTo(expected.PostType)); + Assert.That(actual.Salary, Is.EqualTo(expected.Salary)); + }); + } +} + diff --git a/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/RequestStorageContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/RequestStorageContractTests.cs new file mode 100644 index 0000000..d425a55 --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/RequestStorageContractTests.cs @@ -0,0 +1,320 @@ +using Microsoft.EntityFrameworkCore; +using SmallSoftwareContracts.DataModels; +using SmallSoftwareContracts.Enums; +using SmallSoftwareContracts.Exceptions; +using SmallSoftwareDatabase.Implementations; +using SmallSoftwareDatabase.Models; +using System.ComponentModel.DataAnnotations; + +namespace SmallSoftwareTests.StoragesContracts; + +internal class RequestStorageContractTests : BaseStorageContractTest +{ + private RequestStorageContract _requesttStorageContract; + private Worker _worker; + private Software _software; + private Manufacturer _manufacturer; + [SetUp] + public void SetUp() + { + _requesttStorageContract = new RequestStorageContract(SmallSoftwareDbContext); + _manufacturer = InsertManufacturerToDatabaseAndReturn(); + _worker = InsertWorkerToDatabaseAndReturn(); + _software = InsertSoftwareToDatabaseAndReturn(); + } + [TearDown] + public void TearDown() + { + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Requests\" CASCADE; "); + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Workers\" CASCADE; "); + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Softwares\" CASCADE; "); + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Manufacturers\" CASCADE;"); + } + [Test] + public void Try_GetList_WhenHaveRecords_Test() + { + var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 5, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "", 10, installationRequests: [(_software.Id, 10, 1.2)]); + var list = _requesttStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + AssertElement(list.First(x => x.Id == request.Id), request); + } + [Test] + public void Try_GetList_WhenNoRecords_Test() + { + var list = _requesttStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.Empty); + } + [Test] + public void Try_GetList_ByPeriod_Test() + { + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests: [(_software.Id, 1, 1.2)]); + var list = _requesttStorageContract.GetList(startDate: + DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1)); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(4)); + } + [Test] + public void Try_GetList_ByWorkerId_Test() + { + var worker = InsertWorkerToDatabaseAndReturn("Other worker"); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: + [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: + [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(worker.Id, "", 1, installationRequests: + [(_software.Id, 1, 1.2)]); + var list = _requesttStorageContract.GetList(workerId: _worker.Id); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(list.All(x => x.WorkerId == _worker.Id)); + } + + [Test] + public void Try_GetList_BySoftwareId_Test() + { + var software = InsertSoftwareToDatabaseAndReturn("Other name"); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: + [(_software.Id, 5, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: + [(_software.Id, 1, 1.2), (software.Id, 4, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests: + [(software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests: + [(software.Id, 1, 1.2), (_software.Id, 1, 1.2)]); + var list = _requesttStorageContract.GetList(softwareId: _software.Id); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + Assert.That(list.All(x => x.Softwares!.Any(y => y.SoftwareId == + _software.Id))); + } + [Test] + public void Try_GetList_ByAllParameters_Test() + { + var worker = InsertWorkerToDatabaseAndReturn("Other worker"); + var software = InsertSoftwareToDatabaseAndReturn("Other name"); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(worker.Id, "", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, installationRequests: [(software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(software.Id, 1, 1.2)]); + InsertRequestToDatabaseAndReturn(worker.Id, "", 1, installationRequests: [(_software.Id, 1, 1.2)]); + var list = _requesttStorageContract.GetList(startDate: + DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1), workerId: + _worker.Id, softwareId: _software.Id); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(2)); + } + [Test] + public void Try_GetElementById_WhenHaveRecord_Test() + { + var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, + installationRequests: [(_software.Id, 1, 1.2)]); + AssertElement(_requesttStorageContract.GetElementById(request.Id), request); + } + [Test] + public void Try_GetElementById_WhenNoRecord_Test() + { + InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: + [(_software.Id, 1, 1.2)]); + Assert.That(() => + _requesttStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + } + [Test] + public void Try_GetElementById_WhenRecordHasCanceled_Test() + { + var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, + installationRequests: [(_software.Id, 1, 1.2)], isCancel: true); + AssertElement(_requesttStorageContract.GetElementById(request.Id), request); + } + [Test] + public void Try_AddElement_Test() + { + var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id,"", 0, false, [_software.Id]); + _requesttStorageContract.AddElement(request); + AssertElement(GetRequestFromDatabaseById(request.Id), request); + } + [Test] + public void Try_AddElement_WhenIsDeletedIsTrue_Test() + { + var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id, "test@mail.ru", 1, true, [_software.Id]); + Assert.That(() => _requesttStorageContract.AddElement(request),Throws.Nothing); + AssertElement(GetRequestFromDatabaseById(request.Id), CreateModel(request.Id, + _worker.Id, "test@mail.ru", 1, false, [_software.Id])); + } + [Test] + public void Try_DelElement_Test() + { + var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, + installationRequests: [(_software.Id, 1, 1.2)], isCancel: false); + _requesttStorageContract.DelElement(request.Id); + var element = GetRequestFromDatabaseById(request.Id); + Assert.Multiple(() => + { + Assert.That(element, Is.Not.Null); + Assert.That(element!.IsCancel); + }); + } + [Test] + public void Try_DelElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _requesttStorageContract.DelElement(Guid.NewGuid().ToString()), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_WhenRecordWasCanceled_Test() + { + var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, + installationRequests: [(_software.Id, 1, 1.2)], isCancel: true); + Assert.That(() => _requesttStorageContract.DelElement(request.Id), + Throws.TypeOf()); + } + private Worker InsertWorkerToDatabaseAndReturn(string fio = "test") + { + var worker = new Worker() + { + Id = Guid.NewGuid().ToString(), + FIO = + fio, + PostId = Guid.NewGuid().ToString() + }; + SmallSoftwareDbContext.Workers.Add(worker); + SmallSoftwareDbContext.SaveChanges(); + return worker; + } + private Manufacturer InsertManufacturerToDatabaseAndReturn() + { + var manufacrurer = new Manufacturer() + { + Id = + Guid.NewGuid().ToString(), + ManufacturerName = "name" + }; + SmallSoftwareDbContext.Manufacturers.Add(manufacrurer); + SmallSoftwareDbContext.SaveChanges(); + return manufacrurer; + } + private Software InsertSoftwareToDatabaseAndReturn(string softwareName = "test", + SoftwareType softwareType = SoftwareType.Windows, + double price = 1, bool isDeleted = false) + { + var software = new Software() + { + Id = Guid.NewGuid().ToString(), + ManufacturerId = _manufacturer.Id, + SoftwareName = softwareName, + SoftwareType = softwareType, + Price = price, + IsDeleted = isDeleted + }; + SmallSoftwareDbContext.Softwares.Add(software); + SmallSoftwareDbContext.SaveChanges(); + return software; + } + private Request InsertRequestToDatabaseAndReturn(string workerId, string email, + double sum = 1, bool isCancel = false, List<(string, int, double)>? installationRequests = null) + { + var request = new Request() + { + WorkerId = workerId, + Email = email, + Sum = sum, + IsCancel = isCancel, + InstallationRequests = [] + + }; + if (installationRequests is not null) + { + foreach (var elem in installationRequests) + { + request.InstallationRequests.Add(new InstallationRequest + { + SoftwareId = + elem.Item1, + RequestId = request.Id, + Count = elem.Item2, + Price = elem.Item3 + }); + } + } + SmallSoftwareDbContext.Requests.Add(request); + SmallSoftwareDbContext.SaveChanges(); + return request; + } + private static void AssertElement(RequestDataModel? actual, Request expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.WorkerId, Is.EqualTo(expected.WorkerId)); + Assert.That(actual.IsCancel, Is.EqualTo(expected.IsCancel)); + }); + if (expected.InstallationRequests is not null) + { + Assert.That(actual.Softwares, Is.Not.Null); + Assert.That(actual.Softwares, + Has.Count.EqualTo(expected.InstallationRequests.Count)); + for (int i = 0; i < actual.Softwares.Count; ++i) + { + Assert.Multiple(() => + { + Assert.That(actual.Softwares[i].SoftwareId, + Is.EqualTo(expected.InstallationRequests[i].SoftwareId)); + Assert.That(actual.Softwares[i].Count, + Is.EqualTo(expected.InstallationRequests[i].Count)); + }); + } + } + else + { + Assert.That(actual.Softwares, Is.Null); + } + } + private static RequestDataModel CreateModel(string id, string workerId, string email, double sum, bool isCancel, List softwareIds) + { + var installationRequests = softwareIds.Select(x => new InstallationRequestDataModel(x, id, 1, 1.1)).ToList(); + return new(id, workerId, email, sum, isCancel, installationRequests); + } + private Request? GetRequestFromDatabaseById(string id) => + SmallSoftwareDbContext.Requests.Include(x => x.InstallationRequests).FirstOrDefault(x => x.Id == id); + private static void AssertElement(Request? actual, RequestDataModel expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.WorkerId, Is.EqualTo(expected.WorkerId)); + Assert.That(actual.IsCancel, Is.EqualTo(expected.IsCancel)); + }); + if (expected.Softwares is not null) + { + Assert.That(actual.InstallationRequests, Is.Not.Null); + Assert.That(actual.InstallationRequests, + Has.Count.EqualTo(expected.Softwares.Count)); + for (int i = 0; i < actual.InstallationRequests.Count; ++i) + { + Assert.Multiple(() => + { + Assert.That(actual.InstallationRequests[i].SoftwareId, + Is.EqualTo(expected.Softwares[i].SoftwareId)); + Assert.That(actual.InstallationRequests[i].Count, + Is.EqualTo(expected.Softwares[i].Count)); + }); + } + } + else + { + Assert.That(actual.InstallationRequests, Is.Null); + } + + } +} \ No newline at end of file diff --git a/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/SalaryStorageContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/SalaryStorageContractTests.cs new file mode 100644 index 0000000..9c437cf --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/SalaryStorageContractTests.cs @@ -0,0 +1,175 @@ +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)); + }); + } + +} diff --git a/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/SoftwareStorageContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/SoftwareStorageContractTests.cs new file mode 100644 index 0000000..c895ec2 --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/SoftwareStorageContractTests.cs @@ -0,0 +1,437 @@ +using Microsoft.EntityFrameworkCore; +using SmallSoftwareContracts.DataModels; +using SmallSoftwareContracts.Enums; +using SmallSoftwareContracts.Exceptions; +using SmallSoftwareDatabase.Implementations; +using SmallSoftwareDatabase.Models; + +namespace SmallSoftwareTests.StoragesContracts; +[TestFixture] +internal class SoftwareStorageContractTests : BaseStorageContractTest +{ + private SoftwareStorageContract _softwareStorageContract; + private Manufacturer _manufacturer; + [SetUp] +public void SetUp() + { + _softwareStorageContract = new + SoftwareStorageContract(SmallSoftwareDbContext); + _manufacturer = InsertManufacturerToDatabaseAndReturn(); + } + [TearDown] + public void TearDown() + { + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Softwares\" CASCADE; "); + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Manufacturers\" CASCADE;"); + } + [Test] + public void Try_GetList_WhenHaveRecords_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id, + "name 1"); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 2"); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 3"); + var list = _softwareStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + AssertElement(list.First(x => x.Id == software.Id), software); + } + [Test] + public void Try_GetList_WhenNoRecords_Test() + { + var list = _softwareStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.Empty); + } + [Test] + public void Try_GetList_OnlyActual_Test() + { + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 1", isDeleted: true); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 2", isDeleted: false); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 3", isDeleted: false); + var list = _softwareStorageContract.GetList(onlyActive: true); + Assert.That(list, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(!list.Any(x => x.IsDeleted)); + }); + } + [Test] + public void Try_GetList_IncludeNoActual_Test() + { + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 1", isDeleted: true); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 2", isDeleted: true); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 3", isDeleted: false); + var list = _softwareStorageContract.GetList(onlyActive: false); + Assert.That(list, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(list, Has.Count.EqualTo(3)); + Assert.That(list.Count(x => x.IsDeleted), Is.EqualTo(2)); + Assert.That(list.Count(x => !x.IsDeleted), Is.EqualTo(1)); + }); + } + [Test] + public void Try_GetList_ByManufacturer_Test() + { + var manufacruer = InsertManufacturerToDatabaseAndReturn("name 2"); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 1", isDeleted: true); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 2", isDeleted: false); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + manufacruer.Id, "name 3", isDeleted: false); + var list = _softwareStorageContract.GetList(manufacturerId: + _manufacturer.Id, onlyActive: false); + Assert.That(list, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(list.All(x => x.ManufacturerId == + _manufacturer.Id)); + }); + } + [Test] + public void Try_GetList_ByManufacturerOnlyActual_Test() + { + var manufacruer = InsertManufacturerToDatabaseAndReturn("name 2"); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 1", isDeleted: true); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, "name 2", isDeleted: false); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + manufacruer.Id, "name 3", isDeleted: false); + var list = _softwareStorageContract.GetList(manufacturerId: + _manufacturer.Id, onlyActive: true); + Assert.That(list, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(list, Has.Count.EqualTo(1)); + Assert.That(list.All(x => x.ManufacturerId == _manufacturer.Id + && !x.IsDeleted)); + }); + } + [Test] + public void Try_GetHistoryBySoftwareId_WhenHaveRecords_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id, + "name 1"); + InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20, + DateTime.UtcNow.AddDays(-1)); + InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30, + DateTime.UtcNow.AddMinutes(-10)); + InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40, + DateTime.UtcNow.AddDays(1)); + var list = _softwareStorageContract.GetHistoryBySoftwareId(software.Id); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + } + [Test] + public void Try_GetHistoryBySoftwareId_WhenNoRecords_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id, + "name 1"); + InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20, + DateTime.UtcNow.AddDays(-1)); + InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30, + DateTime.UtcNow.AddMinutes(-10)); + InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40, + DateTime.UtcNow.AddDays(1)); + var list = + _softwareStorageContract.GetHistoryBySoftwareId(Guid.NewGuid().ToString()); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(0)); + } + [Test] + public void Try_GetElementById_WhenHaveRecord_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id); + AssertElement(_softwareStorageContract.GetElementById(software.Id), + software); + } + [Test] + public void Try_GetElementById_WhenNoRecord_Test() + { + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id); + Assert.That(() => + _softwareStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + } + [Test] + public void Try_GetElementById_WhenRecordHasDeleted_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id, + isDeleted: true); + Assert.That(() => _softwareStorageContract.GetElementById(software.Id), + Is.Null); + } + [Test] + public void Try_GetElementByName_WhenHaveRecord_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id); + AssertElement(_softwareStorageContract.GetElementByName(software.SoftwareName) + , software); + } + [Test] + public void Try_GetElementByName_WhenNoRecord_Test() + { + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id); + Assert.That(() => _softwareStorageContract.GetElementByName("name"), + Is.Null); + } + [Test] + public void Try_GetElementByName_WhenRecordHasDeleted_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id, + isDeleted: true); + Assert.That(() => + _softwareStorageContract.GetElementById(software.SoftwareName), Is.Null); + } + [Test] + public void Try_AddElement_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, isDeleted: false); + _softwareStorageContract.AddElement(software); + AssertElement(GetSoftwareFromDatabaseById(software.Id), software); + } + [Test] + public void Try_AddElement_WhenIsDeletedIsTrue_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, isDeleted: true); + Assert.That(() => _softwareStorageContract.AddElement(software), + Throws.Nothing); + AssertElement(GetSoftwareFromDatabaseById(software.Id), + CreateModel(software.Id, _manufacturer.Id, isDeleted: false)); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSameId_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id); + InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id, + softwareName: "name unique"); + Assert.That(() => _softwareStorageContract.AddElement(software), + Throws.TypeOf()); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSameName_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, "name unique", isDeleted: false); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, softwareName: software.SoftwareName, isDeleted: false); + Assert.That(() => _softwareStorageContract.AddElement(software), + Throws.TypeOf()); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSameNameButOneWasDeleted_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, "name unique", isDeleted: false); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, softwareName: software.SoftwareName, isDeleted: true); + Assert.That(() => _softwareStorageContract.AddElement(software), + Throws.Nothing); + } + [Test] + public void Try_UpdElement_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, isDeleted: false); + InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id, + isDeleted: false); + _softwareStorageContract.UpdElement(software); + AssertElement(GetSoftwareFromDatabaseById(software.Id), software); + } + [Test] + public void Try_UpdElement_WhenIsDeletedIsTrue_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, isDeleted: true); + InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id, + isDeleted: false); + _softwareStorageContract.UpdElement(software); + AssertElement(GetSoftwareFromDatabaseById(software.Id), + CreateModel(software.Id, _manufacturer.Id, isDeleted: false)); + } + [Test] + public void Try_UpdElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _softwareStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id)), Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_WhenHaveRecordWithSameName_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, "name unique", isDeleted: false); + InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id, + softwareName: "name"); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, softwareName: software.SoftwareName); + Assert.That(() => _softwareStorageContract.UpdElement(software), + Throws.TypeOf()); + } + [Test] + public void + Try_UpdElement_WhenHaveRecordWithSameNameButOneWasDeleted_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id, "name unique", isDeleted: false); + InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id, + softwareName: "name"); + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), + _manufacturer.Id, softwareName: software.SoftwareName, isDeleted: true); + Assert.That(() => _softwareStorageContract.UpdElement(software), + Throws.Nothing); + } + [Test] + public void Try_UpdElement_WhenRecordWasDeleted_Test() + { + var software = CreateModel(Guid.NewGuid().ToString(), + _manufacturer.Id); + InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id, + isDeleted: true); + Assert.That(() => _softwareStorageContract.UpdElement(software), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id, + isDeleted: false); + _softwareStorageContract.DelElement(software.Id); + var element = GetSoftwareFromDatabaseById(software.Id); + Assert.Multiple(() => + { + Assert.That(element, Is.Not.Null); + Assert.That(element!.IsDeleted); + }); + } + [Test] + public void Try_DelElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _softwareStorageContract.DelElement(Guid.NewGuid().ToString()), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_WhenRecordWasDeleted_Test() + { + var software = + InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id, + isDeleted: true); + Assert.That(() => _softwareStorageContract.DelElement(software.Id), + Throws.TypeOf()); + } + private Manufacturer InsertManufacturerToDatabaseAndReturn(string + manufacturerName = "name") + { + var manufacrurer = new Manufacturer() + { + Id = + Guid.NewGuid().ToString(), + ManufacturerName = manufacturerName + }; + SmallSoftwareDbContext.Manufacturers.Add(manufacrurer); + SmallSoftwareDbContext.SaveChanges(); + return manufacrurer; + } + private Software InsertSoftwareToDatabaseAndReturn(string id, string + manufacturerId, string softwareName = "test", SoftwareType softwareType = + SoftwareType.Windows, double price = 1, bool isDeleted = false) + { + var software = new Software() + { + Id = id, + ManufacturerId = + manufacturerId, + SoftwareName = softwareName, + SoftwareType = softwareType, + Price = + price, + IsDeleted = isDeleted + }; + SmallSoftwareDbContext.Softwares.Add(software); + SmallSoftwareDbContext.SaveChanges(); + return software; + } + private SoftwareHistory InsertSoftwareHistoryToDatabaseAndReturn(string + softwareId, double price, DateTime changeDate) + { + var softwareHistory = new SoftwareHistory() + { + Id = + Guid.NewGuid().ToString(), + SoftwareId = softwareId, + OldPrice = price, + ChangeDate = + changeDate + }; + SmallSoftwareDbContext.SoftwareHistories.Add(softwareHistory); + SmallSoftwareDbContext.SaveChanges(); + return softwareHistory; + } + private static void AssertElement(SoftwareDataModel? actual, Software + expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.ManufacturerId, + Is.EqualTo(expected.ManufacturerId)); + Assert.That(actual.SoftwareName, + Is.EqualTo(expected.SoftwareName)); + Assert.That(actual.SoftwareType, + Is.EqualTo(expected.SoftwareType)); + Assert.That(actual.Price, Is.EqualTo(expected.Price)); + Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted)); + }); + } + private static SoftwareDataModel CreateModel(string id, string + manufacturerId, string softwareName = "test", SoftwareType softwareType = + SoftwareType.Windows, double price = 1, bool isDeleted = false) + => new(id, softwareName, softwareType, manufacturerId, price, + isDeleted); + private Software? GetSoftwareFromDatabaseById(string id) => + SmallSoftwareDbContext.Softwares.FirstOrDefault(x => x.Id == id); + private static void AssertElement(Software? actual, SoftwareDataModel + expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.ManufacturerId, + Is.EqualTo(expected.ManufacturerId)); + Assert.That(actual.SoftwareName, + Is.EqualTo(expected.SoftwareName)); + Assert.That(actual.SoftwareType, + Is.EqualTo(expected.SoftwareType)); + Assert.That(actual.Price, Is.EqualTo(expected.Price)); + Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted)); + }); + } +} diff --git a/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/WorkerStorageContractTests.cs b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/WorkerStorageContractTests.cs new file mode 100644 index 0000000..0d4dabd --- /dev/null +++ b/SmallSoftwareProject/SmallSoftwareTests/StoragesContracts/WorkerStorageContractTests.cs @@ -0,0 +1,265 @@ +using Microsoft.EntityFrameworkCore; +using SmallSoftwareContracts.DataModels; +using SmallSoftwareContracts.Exceptions; +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 WorkerStorageContractTests : BaseStorageContractTest +{ + private WorkerStorageContract _workerStorageContract; + [SetUp] + public void SetUp() + { + _workerStorageContract = new + WorkerStorageContract(SmallSoftwareDbContext); + } + [TearDown] + public void TearDown() + { + SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Workers\" CASCADE; "); + } + [Test] + public void Try_GetList_WhenHaveRecords_Test() + { + var worker = + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1"); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2"); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3"); + var list = _workerStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + AssertElement(list.First(), worker); + } + [Test] + public void Try_GetList_WhenNoRecords_Test() + { + var list = _workerStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.Empty); + } + [Test] + public void Try_GetList_ByPostId_Test() + { + var postId = Guid.NewGuid().ToString(); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", + postId); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", + postId); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3"); + var list = _workerStorageContract.GetList(postId: postId); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(2)); + Assert.That(list.All(x => x.PostId == postId)); + } + [Test] + public void Try_GetList_ByBirthDate_Test() + { + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", + birthDate: DateTime.UtcNow.AddYears(-25)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", + birthDate: DateTime.UtcNow.AddYears(-21)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", + birthDate: DateTime.UtcNow.AddYears(-20)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", + birthDate: DateTime.UtcNow.AddYears(-19)); + var list = _workerStorageContract.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() + { + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", + employmentDate: DateTime.UtcNow.AddDays(-2)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", + employmentDate: DateTime.UtcNow.AddDays(-1)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", + employmentDate: DateTime.UtcNow.AddDays(1)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", + employmentDate: DateTime.UtcNow.AddDays(2)); + var list = _workerStorageContract.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(); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", + postId, birthDate: DateTime.UtcNow.AddYears(-25), employmentDate: + DateTime.UtcNow.AddDays(-2)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", + postId, birthDate: DateTime.UtcNow.AddYears(-22), employmentDate: + DateTime.UtcNow.AddDays(-1)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", + postId, birthDate: DateTime.UtcNow.AddYears(-21), employmentDate: + DateTime.UtcNow.AddDays(-1)); + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", + birthDate: DateTime.UtcNow.AddYears(-20), employmentDate: + DateTime.UtcNow.AddDays(1)); + var list = _workerStorageContract.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 worker = + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString()); + AssertElement(_workerStorageContract.GetElementById(worker.Id), + worker); + } + [Test] + public void Try_GetElementById_WhenNoRecord_Test() + { + Assert.That(() => + _workerStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + } + [Test] + public void Try_GetElementByFIO_WhenHaveRecord_Test() + { + var worker = + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString()); + AssertElement(_workerStorageContract.GetElementByFIO(worker.FIO), + worker); + } + [Test] + public void Try_GetElementByFIO_WhenNoRecord_Test() + { + Assert.That(() => _workerStorageContract.GetElementByFIO("New Fio"), + Is.Null); + } + [Test] + public void Try_AddElement_Test() + { + var worker = CreateModel(Guid.NewGuid().ToString()); + _workerStorageContract.AddElement(worker); + AssertElement(GetWorkerFromDatabase(worker.Id), worker); + } + [Test] + public void Try_AddElement_WhenHaveRecordWithSameId_Test() + { + var worker = CreateModel(Guid.NewGuid().ToString()); + InsertWorkerToDatabaseAndReturn(worker.Id); + Assert.That(() => _workerStorageContract.AddElement(worker), + Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_Test() + { + var worker = CreateModel(Guid.NewGuid().ToString(), "New Fio"); + InsertWorkerToDatabaseAndReturn(worker.Id); + _workerStorageContract.UpdElement(worker); + AssertElement(GetWorkerFromDatabase(worker.Id), worker); + } + [Test] + public void Try_UpdElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _workerStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString())), + Throws.TypeOf()); + } + [Test] + public void Try_UpdElement_WhenNoRecordWasDeleted_Test() + { + var worker = CreateModel(Guid.NewGuid().ToString()); + InsertWorkerToDatabaseAndReturn(worker.Id, isDeleted: true); + Assert.That(() => _workerStorageContract.UpdElement(worker), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_Test() + { + var worker = + InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString()); + _workerStorageContract.DelElement(worker.Id); + var element = GetWorkerFromDatabase(worker.Id); + Assert.That(element, Is.Not.Null); + Assert.That(element.IsDeleted); + } + [Test] + public void Try_DelElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => + _workerStorageContract.DelElement(Guid.NewGuid().ToString()), + Throws.TypeOf()); + } + [Test] + public void Try_DelElement_WhenNoRecordWasDeleted_Test() + { + var worker = CreateModel(Guid.NewGuid().ToString()); + InsertWorkerToDatabaseAndReturn(worker.Id, isDeleted: true); + Assert.That(() => _workerStorageContract.DelElement(worker.Id), + Throws.TypeOf()); + } + private Worker InsertWorkerToDatabaseAndReturn(string id, string fio = + "test", string? postId = null, DateTime? birthDate = null, DateTime? + employmentDate = null, bool isDeleted = false) + { + var worker = new Worker() + { + Id = id, + FIO = fio, + PostId = postId ?? + Guid.NewGuid().ToString(), + BirthDate = birthDate ?? DateTime.UtcNow.AddYears(- + 20), + EmploymentDate = employmentDate ?? DateTime.UtcNow, + IsDeleted = isDeleted + }; + SmallSoftwareDbContext.Workers.Add(worker); + SmallSoftwareDbContext.SaveChanges(); + return worker; + } + private static void AssertElement(WorkerDataModel? actual, Worker 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 static WorkerDataModel 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 Worker? GetWorkerFromDatabase(string id) => + SmallSoftwareDbContext.Workers.FirstOrDefault(x => x.Id == id); + private static void AssertElement(Worker? actual, WorkerDataModel 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)); + }); + } +}