This commit is contained in:
2025-03-12 22:39:58 +04:00
parent 65a03714a2
commit 8bdc9275d5
23 changed files with 1848 additions and 95 deletions

View File

@@ -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<PostDataModel> GetAllDataOfPost(string postId)

View File

@@ -5,29 +5,23 @@ 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");
}

View File

@@ -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<InstallationRequestDataModel> softwares) : IValidation
public class RequestDataModel(string id, string workerId, string email, double sum, bool isCancel, List<InstallationRequestDataModel> 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<InstallationRequestDataModel> Softwares { get; private set; } = softwares;
public List<InstallationRequestDataModel> Softwares { get; private set; } = installationRequests;
public void Validate()
{
if (Id.IsEmpty())

View File

@@ -17,6 +17,8 @@ internal class RequestStorageContract : IRequestStorageContract
_dbContext = dbContext;
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<InstallationRequest, InstallationRequestDataModel>();
cfg.CreateMap<InstallationRequestDataModel, InstallationRequest>();
cfg.CreateMap<Request, RequestDataModel>();
cfg.CreateMap<RequestDataModel, Request>()
.ForMember(x => x.IsCancel, x => x.MapFrom(src => false))

View File

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

View File

@@ -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;

View File

@@ -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
{

View File

@@ -16,4 +16,9 @@
<ProjectReference Include="..\SmallSoftwareContracts\SmallSoftwareContracts.csproj" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="SmallSoftwareTests" />
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" />
</ItemGroup>
</Project>

View File

@@ -33,39 +33,33 @@ internal class PostBusinessLogicContractTests
}
[Test]
public void GetAllPosts_ReturnListOfRecords_Test()
{
//Arrange
{//Arrange
var listOriginal = new List<PostDataModel>()
{
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<bool>())).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<bool>())).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<bool>()),
_postStorageContract.Verify(x => x.GetList(),
Times.Exactly(2));
}
[Test]
@@ -87,7 +81,7 @@ internal class PostBusinessLogicContractTests
Assert.That(() =>
_postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()),
Throws.TypeOf<NullListException>());
_postStorageContract.Verify(x => x.GetList(It.IsAny<bool>()),
_postStorageContract.Verify(x => x.GetList(),
Times.Once);
}
[Test]
@@ -95,13 +89,13 @@ internal class PostBusinessLogicContractTests
{
//Arrange
_postStorageContract.Setup(x =>
x.GetList(It.IsAny<bool>())).Throws(new StorageException(new
x.GetList()).Throws(new StorageException(new
InvalidOperationException()));
//Act&Assert
Assert.That(() =>
_postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()),
Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => x.GetList(It.IsAny<bool>()),
_postStorageContract.Verify(x => x.GetList(),
Times.Once);
}
[Test]
@@ -111,10 +105,8 @@ internal class PostBusinessLogicContractTests
var postId = Guid.NewGuid().ToString();
var listOriginal = new List<PostDataModel>()
{
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<string>())).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<PostDataModel>()))
.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<ElementExistsException>());
_postStorageContract.Verify(x =>
x.AddElement(It.IsAny<PostDataModel>()), 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<ValidationException>());
_postStorageContract.Verify(x =>
x.AddElement(It.IsAny<PostDataModel>()), 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<StorageException>());
_postStorageContract.Verify(x =>
x.AddElement(It.IsAny<PostDataModel>()), 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<PostDataModel>()))
.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<ElementNotFoundException>());
_postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), 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<ElementExistsException>());
_postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), 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<ValidationException>());
_postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), 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<StorageException>());
_postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), Times.Once);

View File

@@ -34,7 +34,7 @@ internal class RequestBusinessLogicContractTests
var date = DateTime.UtcNow;
var listOriginal = new List<RequestDataModel>()
{
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<DateTime?>(),
@@ -112,7 +112,7 @@ internal class RequestBusinessLogicContractTests
var workerId = Guid.NewGuid().ToString();
var listOriginal = new List<RequestDataModel>()
{
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<DateTime?>(),
@@ -229,7 +229,7 @@ internal class RequestBusinessLogicContractTests
var softwareId = Guid.NewGuid().ToString();
var listOriginal = new List<RequestDataModel>()
{
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<RequestDataModel>()))
.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<ElementExistsException>());
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)])), Throws.TypeOf<ElementExistsException>());
_requestStorageContract.Verify(x => x.AddElement(It.IsAny<RequestDataModel>()), 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<StorageException>());
_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<StorageException>());
_requestStorageContract.Verify(x =>
x.AddElement(It.IsAny<RequestDataModel>()), Times.Once);
}

View File

@@ -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<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, postSalary, true, DateTime.UtcNow));
PostType.SoftInstaller, postSalary));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -291,7 +291,7 @@ internal class SalaryBusinessLogicContractTests
1, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow));
PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -313,7 +313,7 @@ internal class SalaryBusinessLogicContractTests
.Returns([]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, postSalary, true, DateTime.UtcNow));
PostType.SoftInstaller, postSalary));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -340,7 +340,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
var workerId = Guid.NewGuid().ToString();
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow));
PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -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<string>()))
.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<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow));
PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -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<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow));
PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))

View File

@@ -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<ValidationException>());
installationRequest = CreateDataModel(string.Empty,
Guid.NewGuid().ToString(), 10);
Guid.NewGuid().ToString(), 10, 10);
Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>());
}
@@ -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<ValidationException>());
}
@@ -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<ValidationException>());
installationRequest = CreateDataModel(string.Empty,
Guid.NewGuid().ToString(), 10);
Guid.NewGuid().ToString(), 10, 10);
Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>());
}
@@ -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<ValidationException>());
}
@@ -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<ValidationException>());
installationRequest = CreateDataModel(Guid.NewGuid().ToString(),
Guid.NewGuid().ToString(), -10);
Guid.NewGuid().ToString(), -10, -20);
Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>());
}
@@ -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);
}

View File

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

View File

@@ -98,7 +98,7 @@ internal class RequestDataModelTests
new(id, workerId, email, sum, isCancel, softwares);
private static List<InstallationRequestDataModel> CreateSubDataModel() =>
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), "SoftwareName", 1)];
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), "SoftwareName", 1, 10)];
}

View File

@@ -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;";
}

View File

@@ -20,6 +20,7 @@
<ItemGroup>
<ProjectReference Include="..\SmallSoftwareBusinessLogic\SmallSoftwareBusinessLogic.csproj" />
<ProjectReference Include="..\SmallSoftwareContracts\SmallSoftwareContracts.csproj" />
<ProjectReference Include="..\SmallSoftwareDatabase\SmallSoftwareDatabase.csproj" />
</ItemGroup>
<ItemGroup>

View File

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

View File

@@ -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<ElementExistsException>());
}
[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<ElementExistsException>());
}
[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<ElementNotFoundException>());
}
[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<ElementExistsException>());
}
[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<StorageException>());
}
[Test]
public void Try_DelElement_WhenNoRecordWithThisId_Test()
{
Assert.That(() =>
_manufacturerStorageContract.DelElement(Guid.NewGuid().ToString()),
Throws.TypeOf<ElementNotFoundException>());
}
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));
});
}
}

View File

@@ -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<ElementExistsException>());
}
[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<ElementExistsException>());
}
[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<ElementNotFoundException>());
}
[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<ElementExistsException>());
}
[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<ElementDeletedException>());
}
[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<ElementNotFoundException>());
}
[Test]
public void Try_DelElement_WhenRecordWasDeleted_Test()
{
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
isActual: false);
Assert.That(() => _postStorageContract.DelElement(post.PostId),
Throws.TypeOf<ElementDeletedException>());
}
[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<ElementNotFoundException>());
}
[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));
});
}
}

View File

@@ -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<ElementNotFoundException>());
}
[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<ElementDeletedException>());
}
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<string> 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);
}
}
}

View File

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

View File

@@ -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<ElementExistsException>());
}
[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<ElementExistsException>());
}
[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<ElementNotFoundException>());
}
[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<ElementExistsException>());
}
[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<ElementNotFoundException>());
}
[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<ElementNotFoundException>());
}
[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<ElementNotFoundException>());
}
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));
});
}
}

View File

@@ -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<ElementExistsException>());
}
[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<ElementNotFoundException>());
}
[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<ElementNotFoundException>());
}
[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<ElementNotFoundException>());
}
[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<ElementNotFoundException>());
}
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));
});
}
}