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}", _logger.LogInformation("GetAllPosts params: {onlyActive}",
onlyActive); onlyActive);
return _postStorageContract.GetList(onlyActive) ?? throw new return _postStorageContract.GetList() ?? throw new
NullListException(); NullListException();
} }
public List<PostDataModel> GetAllDataOfPost(string postId) public List<PostDataModel> GetAllDataOfPost(string postId)

View File

@@ -5,30 +5,24 @@ using SmallSoftwareContracts.Infrastructure;
namespace SmallSoftwareContracts.DataModels; namespace SmallSoftwareContracts.DataModels;
public class PostDataModel(string id, string postName, PostType public class PostDataModel(string postId, string postName, PostType
postType, double salary, bool isActual, DateTime changeDate) : IValidation 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 string PostName { get; private set; } = postName;
public PostType PostType { get; private set; } = postType; public PostType PostType { get; private set; } = postType;
public double Salary { get; private set; } = salary; public double Salary { get; private set; } = salary;
public bool IsActual { get; private set; } = isActual;
public DateTime ChangeDate { get; private set; } = changeDate;
public void Validate() public void Validate()
{ {
if (Id.IsEmpty()) if (Id.IsEmpty())
throw new ValidationException("Field Id is empty"); throw new ValidationException("Field Id is empty");
if (!Id.IsGuid()) if (!Id.IsGuid())
throw new ValidationException("The value in the field Id is not a unique identifier"); throw new ValidationException("The value in the field Id is not a unique identifier");
if (PostName.IsEmpty()) if (PostName.IsEmpty())
throw new ValidationException("Field PostName is empty"); throw new ValidationException("Field PostName is empty");
if (PostType == PostType.None) if (PostType == PostType.None)
throw new ValidationException("Field PostType is empty"); throw new ValidationException("Field PostType is empty");
if (Salary <= 0) if (Salary <= 0)
throw new ValidationException("Field Salary is empty"); throw new ValidationException("Field Salary is empty");
} }
} }

View File

@@ -7,14 +7,14 @@ using System.Text.RegularExpressions;
namespace SmallSoftwareContracts.DataModels; 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 Id { get; private set; } = id;
public string WorkerId { get; private set; } = workerId; public string WorkerId { get; private set; } = workerId;
public string Email { get; private set; } = email; public string Email { get; private set; } = email;
public double Sum { get; private set; } = sum; public double Sum { get; private set; } = sum;
public bool IsCancel { get; private set; } = isCancel; 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() public void Validate()
{ {
if (Id.IsEmpty()) if (Id.IsEmpty())

View File

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

View File

@@ -10,7 +10,7 @@ namespace SmallSoftwareDatabase.Models;
internal class Request 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 WorkerId { get; set; }
public required string Email { get; set; } public required string Email { get; set; }
public double Sum { get; set; } public double Sum { get; set; }

View File

@@ -1,10 +1,5 @@
using SmallSoftwareContracts.Enums; using SmallSoftwareContracts.Enums;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmallSoftwareDatabase.Models; namespace SmallSoftwareDatabase.Models;

View File

@@ -1,10 +1,4 @@
using System; namespace SmallSoftwareDatabase.Models;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmallSoftwareDatabase.Models;
internal class SoftwareHistory internal class SoftwareHistory
{ {

View File

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

View File

@@ -33,39 +33,33 @@ internal class PostBusinessLogicContractTests
} }
[Test] [Test]
public void GetAllPosts_ReturnListOfRecords_Test() public void GetAllPosts_ReturnListOfRecords_Test()
{ {//Arrange
//Arrange
var listOriginal = new List<PostDataModel>() var listOriginal = new List<PostDataModel>()
{ {
new(Guid.NewGuid().ToString(),"name 1", PostType.SoftInstaller, new(Guid.NewGuid().ToString(),"name 1", PostType.SoftInstaller,
10, true, DateTime.UtcNow), 10),
new(Guid.NewGuid().ToString(), "name 2", PostType.SoftInstaller, new(Guid.NewGuid().ToString(), "name 2", PostType.SoftInstaller,
10, false, DateTime.UtcNow), 10),
new(Guid.NewGuid().ToString(), "name 3", PostType.SoftInstaller, new(Guid.NewGuid().ToString(), "name 3", PostType.SoftInstaller,
10, true, DateTime.UtcNow), 10),
}; };
_postStorageContract.Setup(x => _postStorageContract.Setup(x => x.GetList()).Returns(listOriginal);
x.GetList(It.IsAny<bool>())).Returns(listOriginal);
//Act //Act
var listOnlyActive = _postBusinessLogicContract.GetAllPosts(true); var list = _postBusinessLogicContract.GetAllPosts();
var listAll = _postBusinessLogicContract.GetAllPosts(false);
//Assert //Assert
Assert.Multiple(() => Assert.Multiple(() =>
{ {
Assert.That(listOnlyActive, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(listAll, Is.Not.Null); Assert.That(list, Is.EquivalentTo(listOriginal));
Assert.That(listOnlyActive, Is.EquivalentTo(listOriginal));
Assert.That(listAll, Is.EquivalentTo(listOriginal));
}); });
_postStorageContract.Verify(x => x.GetList(true), Times.Once); _postStorageContract.Verify(x => x.GetList(), Times.Once);
_postStorageContract.Verify(x => x.GetList(false), Times.Once);
} }
[Test] [Test]
public void GetAllPosts_ReturnEmptyList_Test() public void GetAllPosts_ReturnEmptyList_Test()
{ {
//Arrange //Arrange
_postStorageContract.Setup(x => _postStorageContract.Setup(x =>
x.GetList(It.IsAny<bool>())).Returns([]); x.GetList()).Returns([]);
//Act //Act
var listOnlyActive = _postBusinessLogicContract.GetAllPosts(true); var listOnlyActive = _postBusinessLogicContract.GetAllPosts(true);
var listAll = _postBusinessLogicContract.GetAllPosts(false); var listAll = _postBusinessLogicContract.GetAllPosts(false);
@@ -77,7 +71,7 @@ internal class PostBusinessLogicContractTests
Assert.That(listOnlyActive, Has.Count.EqualTo(0)); Assert.That(listOnlyActive, Has.Count.EqualTo(0));
Assert.That(listAll, 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)); Times.Exactly(2));
} }
[Test] [Test]
@@ -87,7 +81,7 @@ internal class PostBusinessLogicContractTests
Assert.That(() => Assert.That(() =>
_postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()), _postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()),
Throws.TypeOf<NullListException>()); Throws.TypeOf<NullListException>());
_postStorageContract.Verify(x => x.GetList(It.IsAny<bool>()), _postStorageContract.Verify(x => x.GetList(),
Times.Once); Times.Once);
} }
[Test] [Test]
@@ -95,13 +89,13 @@ internal class PostBusinessLogicContractTests
{ {
//Arrange //Arrange
_postStorageContract.Setup(x => _postStorageContract.Setup(x =>
x.GetList(It.IsAny<bool>())).Throws(new StorageException(new x.GetList()).Throws(new StorageException(new
InvalidOperationException())); InvalidOperationException()));
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()), _postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()),
Throws.TypeOf<StorageException>()); Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => x.GetList(It.IsAny<bool>()), _postStorageContract.Verify(x => x.GetList(),
Times.Once); Times.Once);
} }
[Test] [Test]
@@ -111,10 +105,8 @@ internal class PostBusinessLogicContractTests
var postId = Guid.NewGuid().ToString(); var postId = Guid.NewGuid().ToString();
var listOriginal = new List<PostDataModel>() var listOriginal = new List<PostDataModel>()
{ {
new(postId, "name 1", PostType.SoftInstaller, 10, true, new(postId, "name 1", PostType.SoftInstaller, 10),
DateTime.UtcNow), new(postId, "name 2", PostType.SoftInstaller, 10)
new(postId, "name 2", PostType.SoftInstaller, 10, false,
DateTime.UtcNow)
}; };
_postStorageContract.Setup(x => _postStorageContract.Setup(x =>
x.GetPostWithHistory(It.IsAny<string>())).Returns(listOriginal); x.GetPostWithHistory(It.IsAny<string>())).Returns(listOriginal);
@@ -191,8 +183,7 @@ internal class PostBusinessLogicContractTests
{ {
//Arrange //Arrange
var id = Guid.NewGuid().ToString(); var id = Guid.NewGuid().ToString();
var record = new PostDataModel(id, "name", PostType.SoftInstaller, 10, var record = new PostDataModel(id, "name", PostType.SoftInstaller, 10);
true, DateTime.UtcNow);
_postStorageContract.Setup(x => _postStorageContract.Setup(x =>
x.GetElementById(id)).Returns(record); x.GetElementById(id)).Returns(record);
//Act //Act
@@ -209,7 +200,7 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
var postName = "name"; var postName = "name";
var record = new PostDataModel(Guid.NewGuid().ToString(), postName, var record = new PostDataModel(Guid.NewGuid().ToString(), postName,
PostType.SoftInstaller, 10, true, DateTime.UtcNow); PostType.SoftInstaller, 10);
_postStorageContract.Setup(x => _postStorageContract.Setup(x =>
x.GetElementByName(postName)).Returns(record); x.GetElementByName(postName)).Returns(record);
//Act //Act
@@ -284,14 +275,13 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
var flag = false; var flag = false;
var record = new PostDataModel(Guid.NewGuid().ToString(), "name", var record = new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.Supervisor, 10, true, DateTime.UtcNow.AddDays(-1)); PostType.Supervisor, 10);
_postStorageContract.Setup(x => _postStorageContract.Setup(x =>
x.AddElement(It.IsAny<PostDataModel>())) x.AddElement(It.IsAny<PostDataModel>()))
.Callback((PostDataModel x) => .Callback((PostDataModel x) =>
{ {
flag = x.Id == record.Id && x.PostName == flag = x.Id == record.Id && x.PostName ==
record.PostName && x.PostType == record.PostType && x.Salary == record.Salary && record.PostName && x.PostType == record.PostType && x.Salary == record.Salary;
x.ChangeDate == record.ChangeDate;
}); });
//Act //Act
_postBusinessLogicContract.InsertPost(record); _postBusinessLogicContract.InsertPost(record);
@@ -310,7 +300,7 @@ internal class PostBusinessLogicContractTests
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name",
PostType.Supervisor, 10, true, DateTime.UtcNow)), PostType.Supervisor, 10)),
Throws.TypeOf<ElementExistsException>()); Throws.TypeOf<ElementExistsException>());
_postStorageContract.Verify(x => _postStorageContract.Verify(x =>
x.AddElement(It.IsAny<PostDataModel>()), Times.Once); x.AddElement(It.IsAny<PostDataModel>()), Times.Once);
@@ -329,7 +319,7 @@ internal class PostBusinessLogicContractTests
{ {
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.InsertPost(new Assert.That(() => _postBusinessLogicContract.InsertPost(new
PostDataModel("id", "name", PostType.Supervisor, 10, true, DateTime.UtcNow)), PostDataModel("id", "name", PostType.Supervisor, 10)),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
_postStorageContract.Verify(x => _postStorageContract.Verify(x =>
x.AddElement(It.IsAny<PostDataModel>()), Times.Never); x.AddElement(It.IsAny<PostDataModel>()), Times.Never);
@@ -344,7 +334,7 @@ internal class PostBusinessLogicContractTests
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name",
PostType.Supervisor, 10, true, DateTime.UtcNow)), PostType.Supervisor, 10)),
Throws.TypeOf<StorageException>()); Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => _postStorageContract.Verify(x =>
x.AddElement(It.IsAny<PostDataModel>()), Times.Once); x.AddElement(It.IsAny<PostDataModel>()), Times.Once);
@@ -355,14 +345,13 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
var flag = false; var flag = false;
var record = new PostDataModel(Guid.NewGuid().ToString(), "name", var record = new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.Supervisor, 10, true, DateTime.UtcNow.AddDays(-1)); PostType.Supervisor, 10);
_postStorageContract.Setup(x => _postStorageContract.Setup(x =>
x.UpdElement(It.IsAny<PostDataModel>())) x.UpdElement(It.IsAny<PostDataModel>()))
.Callback((PostDataModel x) => .Callback((PostDataModel x) =>
{ {
flag = x.Id == record.Id && x.PostName == flag = x.Id == record.Id && x.PostName ==
record.PostName && x.PostType == record.PostType && x.Salary == record.Salary && record.PostName && x.PostType == record.PostType && x.Salary == record.Salary;
x.ChangeDate == record.ChangeDate;
}); });
//Act //Act
_postBusinessLogicContract.UpdatePost(record); _postBusinessLogicContract.UpdatePost(record);
@@ -381,7 +370,7 @@ internal class PostBusinessLogicContractTests
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name",
PostType.Supervisor, 10, true, DateTime.UtcNow)), PostType.Supervisor, 10)),
Throws.TypeOf<ElementNotFoundException>()); Throws.TypeOf<ElementNotFoundException>());
_postStorageContract.Verify(x => _postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), Times.Once); x.UpdElement(It.IsAny<PostDataModel>()), Times.Once);
@@ -396,7 +385,7 @@ internal class PostBusinessLogicContractTests
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "anme", _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "anme",
PostType.Supervisor, 10, true, DateTime.UtcNow)), PostType.Supervisor, 10)),
Throws.TypeOf<ElementExistsException>()); Throws.TypeOf<ElementExistsException>());
_postStorageContract.Verify(x => _postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), Times.Once); x.UpdElement(It.IsAny<PostDataModel>()), Times.Once);
@@ -415,7 +404,7 @@ internal class PostBusinessLogicContractTests
{ {
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.UpdatePost(new Assert.That(() => _postBusinessLogicContract.UpdatePost(new
PostDataModel("id", "name", PostType.Supervisor, 10, true, DateTime.UtcNow)), PostDataModel("id", "name", PostType.Supervisor, 10)),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
_postStorageContract.Verify(x => _postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), Times.Never); x.UpdElement(It.IsAny<PostDataModel>()), Times.Never);
@@ -430,7 +419,7 @@ internal class PostBusinessLogicContractTests
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name",
PostType.Supervisor, 10, true, DateTime.UtcNow)), PostType.Supervisor, 10)),
Throws.TypeOf<StorageException>()); Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => _postStorageContract.Verify(x =>
x.UpdElement(It.IsAny<PostDataModel>()), Times.Once); x.UpdElement(It.IsAny<PostDataModel>()), Times.Once);

View File

@@ -34,7 +34,7 @@ internal class RequestBusinessLogicContractTests
var date = DateTime.UtcNow; var date = DateTime.UtcNow;
var listOriginal = new List<RequestDataModel>() 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, []), 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?>(), _requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(),
@@ -112,7 +112,7 @@ internal class RequestBusinessLogicContractTests
var workerId = Guid.NewGuid().ToString(); var workerId = Guid.NewGuid().ToString();
var listOriginal = new List<RequestDataModel>() 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, []), 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?>(), _requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(),
@@ -229,7 +229,7 @@ internal class RequestBusinessLogicContractTests
var softwareId = Guid.NewGuid().ToString(); var softwareId = Guid.NewGuid().ToString();
var listOriginal = new List<RequestDataModel>() 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, []),
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 //Arrange
var id = Guid.NewGuid().ToString(); 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 => _requestStorageContract.Setup(x =>
x.GetElementById(id)).Returns(record); x.GetElementById(id)).Returns(record);
//Act //Act
@@ -405,7 +405,7 @@ internal class RequestBusinessLogicContractTests
//Arrange //Arrange
var flag = false; var flag = false;
var record = new RequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "valid.email@example.com", 10, 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>())) _requestStorageContract.Setup(x => x.AddElement(It.IsAny<RequestDataModel>()))
.Callback((RequestDataModel x) => .Callback((RequestDataModel x) =>
{ {
@@ -435,7 +435,7 @@ internal class RequestBusinessLogicContractTests
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10,false, _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); _requestStorageContract.Verify(x => x.AddElement(It.IsAny<RequestDataModel>()), Times.Once);
} }
[Test] [Test]
@@ -464,7 +464,7 @@ internal class RequestBusinessLogicContractTests
InvalidOperationException())); InvalidOperationException()));
//Act&Assert //Act&Assert
Assert.That(() => 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 => _requestStorageContract.Verify(x =>
x.AddElement(It.IsAny<RequestDataModel>()), Times.Once); 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, [])]); .Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), requestSum, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, postSalary, true, DateTime.UtcNow)); PostType.SoftInstaller, postSalary));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), _workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -291,7 +291,7 @@ internal class SalaryBusinessLogicContractTests
1, false, [])]); 1, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), _workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -313,7 +313,7 @@ internal class SalaryBusinessLogicContractTests
.Returns([]); .Returns([]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, postSalary, true, DateTime.UtcNow)); PostType.SoftInstaller, postSalary));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), _workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
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(); var workerId = Guid.NewGuid().ToString();
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), _workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
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, [])]); workerId, Guid.NewGuid().ToString(), 200, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); PostType.SoftInstaller, 2000));
//Act&Assert //Act&Assert
Assert.That(() => Assert.That(() =>
_salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow), _salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow),
@@ -400,7 +400,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
InvalidOperationException())); InvalidOperationException()));
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), _workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
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, [])]); .Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), 200, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
PostType.SoftInstaller, 2000, true, DateTime.UtcNow)); PostType.SoftInstaller, 2000));
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), _workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))

View File

@@ -17,11 +17,11 @@ internal class InstallationRequestDataModelTests
public void SoftwareIdIsNullOrEmptyTest() public void SoftwareIdIsNullOrEmptyTest()
{ {
var installationRequest = CreateDataModel(null, Guid.NewGuid().ToString(), var installationRequest = CreateDataModel(null, Guid.NewGuid().ToString(),
10); 10, 10);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
installationRequest = CreateDataModel(string.Empty, installationRequest = CreateDataModel(string.Empty,
Guid.NewGuid().ToString(), 10); Guid.NewGuid().ToString(), 10, 10);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
} }
@@ -29,7 +29,7 @@ internal class InstallationRequestDataModelTests
public void SoftwareIdIsNotGuidTest() public void SoftwareIdIsNotGuidTest()
{ {
var installationRequest = CreateDataModel("softwareId", var installationRequest = CreateDataModel("softwareId",
Guid.NewGuid().ToString(), 10); Guid.NewGuid().ToString(), 10, 10);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
} }
@@ -37,11 +37,11 @@ internal class InstallationRequestDataModelTests
public void RequestIdIsNullOrEmptyTest() public void RequestIdIsNullOrEmptyTest()
{ {
var installationRequest = CreateDataModel(Guid.NewGuid().ToString(), null, var installationRequest = CreateDataModel(Guid.NewGuid().ToString(), null,
10); 10, 10);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
installationRequest = CreateDataModel(string.Empty, installationRequest = CreateDataModel(string.Empty,
Guid.NewGuid().ToString(), 10); Guid.NewGuid().ToString(), 10, 10);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
} }
@@ -49,7 +49,7 @@ internal class InstallationRequestDataModelTests
public void RequestIdIsNotGuidTest() public void RequestIdIsNotGuidTest()
{ {
var installationRequest = CreateDataModel(Guid.NewGuid().ToString(), var installationRequest = CreateDataModel(Guid.NewGuid().ToString(),
"requestId", 10); "requestId", 10, 10);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
} }
@@ -57,11 +57,11 @@ internal class InstallationRequestDataModelTests
public void CountIsLessOrZeroTest() public void CountIsLessOrZeroTest()
{ {
var installationRequest = CreateDataModel(Guid.NewGuid().ToString(), var installationRequest = CreateDataModel(Guid.NewGuid().ToString(),
Guid.NewGuid().ToString(), 0); Guid.NewGuid().ToString(), 0, 0);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
installationRequest = CreateDataModel(Guid.NewGuid().ToString(), installationRequest = CreateDataModel(Guid.NewGuid().ToString(),
Guid.NewGuid().ToString(), -10); Guid.NewGuid().ToString(), -10, -20);
Assert.That(() => installationRequest.Validate(), Assert.That(() => installationRequest.Validate(),
Throws.TypeOf<ValidationException>()); Throws.TypeOf<ValidationException>());
} }
@@ -71,7 +71,8 @@ internal class InstallationRequestDataModelTests
var softwareId = Guid.NewGuid().ToString(); var softwareId = Guid.NewGuid().ToString();
var requestId = Guid.NewGuid().ToString(); var requestId = Guid.NewGuid().ToString();
var count = 10; 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.That(() => installationRequest.Validate(), Throws.Nothing);
Assert.Multiple(() => Assert.Multiple(() =>
{ {
@@ -81,6 +82,6 @@ internal class InstallationRequestDataModelTests
}); });
} }
private static InstallationRequestDataModel CreateDataModel(string? softwareId, string? private static InstallationRequestDataModel CreateDataModel(string? softwareId, string?
requestId, int count) => requestId, int count, double price) =>
new(softwareId, requestId, count); new(softwareId, requestId, count, price);
} }

View File

@@ -80,12 +80,10 @@ internal class PostDataModelTests
Assert.That(post.PostName, Is.EqualTo(postName)); Assert.That(post.PostName, Is.EqualTo(postName));
Assert.That(post.PostType, Is.EqualTo(postType)); Assert.That(post.PostType, Is.EqualTo(postType));
Assert.That(post.Salary, Is.EqualTo(salary)); 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, private static PostDataModel CreateDataModel(string? id,
string? postName, PostType postType, double salary, bool isActual, DateTime string? postName, PostType postType, double salary, bool isActual, DateTime
changeDate) => 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); new(id, workerId, email, sum, isCancel, softwares);
private static List<InstallationRequestDataModel> CreateSubDataModel() => 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> <ItemGroup>
<ProjectReference Include="..\SmallSoftwareBusinessLogic\SmallSoftwareBusinessLogic.csproj" /> <ProjectReference Include="..\SmallSoftwareBusinessLogic\SmallSoftwareBusinessLogic.csproj" />
<ProjectReference Include="..\SmallSoftwareContracts\SmallSoftwareContracts.csproj" /> <ProjectReference Include="..\SmallSoftwareContracts\SmallSoftwareContracts.csproj" />
<ProjectReference Include="..\SmallSoftwareDatabase\SmallSoftwareDatabase.csproj" />
</ItemGroup> </ItemGroup>
<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));
});
}
}