salary добавлено. тесты ну как бы позже

This commit is contained in:
2025-03-25 23:02:13 +04:00
parent 6658ada87a
commit 770bf77797
17 changed files with 752 additions and 272 deletions

View File

@@ -16,10 +16,10 @@ public class PostBusinessLogicContract(IPostStorageContract postStorageContract,
{ {
private readonly ILogger _logger = logger; private readonly ILogger _logger = logger;
private readonly IPostStorageContract _postStorageContract = postStorageContract; private readonly IPostStorageContract _postStorageContract = postStorageContract;
public List<PostDataModel> GetAllPosts(bool onlyActive = true) public List<PostDataModel> GetAllPosts()
{ {
_logger.LogInformation("GetAllPosts params: {onlyActive}", onlyActive); _logger.LogInformation("GetAllPosts");
return _postStorageContract.GetList(onlyActive) ?? throw new NullListException(); return _postStorageContract.GetList() ?? throw new NullListException();
} }
public List<PostDataModel> GetAllDataOfPost(string postId) public List<PostDataModel> GetAllDataOfPost(string postId)

View File

@@ -0,0 +1,15 @@
using MagicCarpetContracts.AdapterContracts.OperationResponses;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MagicCarpetContracts.AdapterContracts;
public interface ISalaryAdapter
{
SalaryOperationResponse GetListByPeriod(DateTime fromDate, DateTime toDate);
SalaryOperationResponse GetListByPeriodByEmployee(DateTime fromDate, DateTime toDate, string employeeId);
SalaryOperationResponse CalculateSalary(DateTime date);
}

View File

@@ -0,0 +1,18 @@
using MagicCarpetContracts.Infrastructure;
using MagicCarpetContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MagicCarpetContracts.AdapterContracts.OperationResponses;
public class SalaryOperationResponse : OperationResponse
{
public static SalaryOperationResponse OK(List<SalaryViewModel> data) => OK<SalaryOperationResponse, List<SalaryViewModel>>(data);
public static SalaryOperationResponse NoContent() => NoContent<SalaryOperationResponse>();
public static SalaryOperationResponse NotFound(string message) => NotFound<SalaryOperationResponse>(message);
public static SalaryOperationResponse BadRequest(string message) => BadRequest<SalaryOperationResponse>(message);
public static SalaryOperationResponse InternalServerError(string message) => InternalServerError<SalaryOperationResponse>(message);
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MagicCarpetContracts.BindingModels;
public class SalaryBindingModel
{
public string? Id { get; set; }
public string? EmployeeId { get; set; }
public DateTime SalaryDate { get; set; }
public double EmployeeSalary { get; set; }
}

View File

@@ -11,12 +11,20 @@ namespace MagicCarpetContracts.DataModels;
public class SalaryDataModel(string employeeId, DateTime salaryDate, double employeeSalary) : IValidation public class SalaryDataModel(string employeeId, DateTime salaryDate, double employeeSalary) : IValidation
{ {
private readonly EmployeeDataModel? _employee;
public string EmployeeId { get; private set; } = employeeId; public string EmployeeId { get; private set; } = employeeId;
public DateTime SalaryDate { get; private set; } = salaryDate; public DateTime SalaryDate { get; private set; } = salaryDate;
public double Salary { get; private set; } = employeeSalary; public double Salary { get; private set; } = employeeSalary;
public string EmployeeFIO => _employee?.FIO ?? string.Empty;
public SalaryDataModel(string employeeId, DateTime salaryDate, double employeeSalary, EmployeeDataModel employee) : this(employeeId, salaryDate, employeeSalary)
{
_employee = employee;
}
public void Validate() public void Validate()
{ {
if (EmployeeId.IsEmpty()) if (EmployeeId.IsEmpty())

View File

@@ -10,25 +10,78 @@ using System.Threading.Tasks;
namespace MagicCarpetContracts.DataModels; namespace MagicCarpetContracts.DataModels;
public class SaleDataModel(string id, string employeeId, string? clientId, double sum, DiscountType discountType, public class SaleDataModel : IValidation
double discount, bool isCancel, List<SaleTourDataModel> saleTours) : IValidation
{ {
public string Id { get; private set; } = id; private readonly ClientDataModel? _client;
public string EmployeeId { get; private set; } = employeeId; private readonly EmployeeDataModel? _employee;
public string? ClientId { get; private set; } = clientId; public string Id { get; private set; }
public string EmployeeId { get; private set; }
public string? ClientId { get; private set; }
public DateTime SaleDate { get; private set; } = DateTime.UtcNow; public DateTime SaleDate { get; private set; } = DateTime.UtcNow;
public double Sum { get; private set; } = sum;
public DiscountType DiscountType { get; private set; } = discountType; public double Sum { get; private set; }
public double Discount { get; private set; } = discount; public DiscountType DiscountType { get; private set; }
public bool IsCancel { get; private set; } = isCancel; public double Discount { get; private set; }
public List<SaleTourDataModel> Tours { get; private set; } = saleTours; public bool IsCancel { get; private set; }
public List<SaleTourDataModel>? Tours { get; private set; }
public string ClientFIO => _client?.FIO ?? string.Empty;
public string EmployeeFIO => _employee?.FIO ?? string.Empty;
public SaleDataModel(string id, string employeeId, string? clientId, DiscountType discountType, bool isCancel, List<SaleTourDataModel> saleTours)
{
Id = id;
EmployeeId = employeeId;
ClientId = clientId;
DiscountType = discountType;
IsCancel = isCancel;
Tours = saleTours;
var percent = 0.0;
foreach (DiscountType elem in Enum.GetValues<DiscountType>())
{
if ((elem & discountType) != 0)
{
switch (elem)
{
case DiscountType.None:
break;
case DiscountType.OnSale:
percent += 0.1;
break;
case DiscountType.RegularCustomer:
percent += 0.5;
break;
case DiscountType.Certificate:
percent += 0.3;
break;
}
}
}
Sum = Tours?.Sum(x => x.Price * x.Count) ?? 0;
Discount = Sum * percent;
}
public SaleDataModel(string id, string employeeId, string? clientId, double sum, DiscountType discountType, double discount, bool isCancel,
List<SaleTourDataModel> saleTours, EmployeeDataModel employee, ClientDataModel? client) : this(id, employeeId, clientId, discountType, isCancel, saleTours)
{
Sum = sum;
Discount = discount;
_employee = employee;
_client = client;
}
public SaleDataModel(string id, string employeeId, string? clientId, int discountType,
List<SaleTourDataModel> tours) : this(id, employeeId, clientId, (DiscountType)discountType, false, tours) { }
public void Validate() public void Validate()
{ {

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MagicCarpetContracts.ViewModels;
public class SalaryViewModel
{
public required string EmployeeId { get; set; }
public required string EmployeeFIO { get; set; }
public DateTime SalaryDate { get; set; }
public double Salary { get; set; }
}

View File

@@ -38,61 +38,53 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
var listOriginal = new List<PostDataModel>() var listOriginal = new List<PostDataModel>()
{ {
new(Guid.NewGuid().ToString(),"name 1", PostType.Manager, 10, true, DateTime.UtcNow), new(Guid.NewGuid().ToString(),"name 1", PostType.Manager, 10),
new(Guid.NewGuid().ToString(), "name 2", PostType.Manager, 10, false, DateTime.UtcNow), new(Guid.NewGuid().ToString(), "name 2", PostType.Manager, 10),
new(Guid.NewGuid().ToString(), "name 3", PostType.Manager, 10, true, DateTime.UtcNow), new(Guid.NewGuid().ToString(), "name 3", PostType.Manager, 10),
}; };
_postStorageContract.Setup(x => x.GetList(It.IsAny<bool>())).Returns(listOriginal); _postStorageContract.Setup(x => x.GetList()).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 => x.GetList(It.IsAny<bool>())).Returns([]); _postStorageContract.Setup(x => x.GetList()).Returns([]);
//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, Has.Count.EqualTo(0));
Assert.That(listOnlyActive, Has.Count.EqualTo(0));
Assert.That(listAll, Has.Count.EqualTo(0));
}); });
_postStorageContract.Verify(x => x.GetList(It.IsAny<bool>()), Times.Exactly(2));
} }
[Test] [Test]
public void GetAllPosts_ReturnNull_ThrowException_Test() public void GetAllPosts_ReturnNull_ThrowException_Test()
{ {
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()), Throws.TypeOf<NullListException>()); Assert.That(() => _postBusinessLogicContract.GetAllPosts(), Throws.TypeOf<NullListException>());
_postStorageContract.Verify(x => x.GetList(It.IsAny<bool>()), Times.Once); _postStorageContract.Verify(x => x.GetList(), Times.Once);
} }
[Test] [Test]
public void GetAllPosts_StorageThrowError_ThrowException_Test() public void GetAllPosts_StorageThrowError_ThrowException_Test()
{ {
//Arrange //Arrange
_postStorageContract.Setup(x => x.GetList(It.IsAny<bool>())).Throws(new StorageException(new InvalidOperationException())); _postStorageContract.Setup(x => x.GetList()).Throws(new StorageException(new InvalidOperationException()));
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()), Throws.TypeOf<StorageException>()); Assert.That(() => _postBusinessLogicContract.GetAllPosts(), Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => x.GetList(It.IsAny<bool>()), Times.Once); _postStorageContract.Verify(x => x.GetList(), Times.Once);
} }
[Test] [Test]
@@ -102,8 +94,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.Manager, 10, true, DateTime.UtcNow), new(postId, "name 1", PostType.Manager, 10),
new(postId, "name 2", PostType.Manager, 10, false, DateTime.UtcNow) new(postId, "name 2", PostType.Manager, 10)
}; };
_postStorageContract.Setup(x => x.GetPostWithHistory(It.IsAny<string>())).Returns(listOriginal); _postStorageContract.Setup(x => x.GetPostWithHistory(It.IsAny<string>())).Returns(listOriginal);
//Act //Act
@@ -167,7 +159,7 @@ internal class PostBusinessLogicContractTests
{ {
//Arrange //Arrange
var id = Guid.NewGuid().ToString(); var id = Guid.NewGuid().ToString();
var record = new PostDataModel(id, "name", PostType.Manager, 10, true, DateTime.UtcNow); var record = new PostDataModel(id, "name", PostType.Manager, 10);
_postStorageContract.Setup(x => x.GetElementById(id)).Returns(record); _postStorageContract.Setup(x => x.GetElementById(id)).Returns(record);
//Act //Act
var element = _postBusinessLogicContract.GetPostByData(id); var element = _postBusinessLogicContract.GetPostByData(id);
@@ -182,7 +174,7 @@ internal class PostBusinessLogicContractTests
{ {
//Arrange //Arrange
var postName = "name"; var postName = "name";
var record = new PostDataModel(Guid.NewGuid().ToString(), postName, PostType.Manager, 10, true, DateTime.UtcNow); var record = new PostDataModel(Guid.NewGuid().ToString(), postName, PostType.Manager, 10);
_postStorageContract.Setup(x => x.GetElementByName(postName)).Returns(record); _postStorageContract.Setup(x => x.GetElementByName(postName)).Returns(record);
//Act //Act
var element = _postBusinessLogicContract.GetPostByData(postName); var element = _postBusinessLogicContract.GetPostByData(postName);
@@ -238,12 +230,11 @@ internal class PostBusinessLogicContractTests
{ {
//Arrange //Arrange
var flag = false; var flag = false;
var record = new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 10, true, DateTime.UtcNow.AddDays(-1)); var record = new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 10);
_postStorageContract.Setup(x => x.AddElement(It.IsAny<PostDataModel>())) _postStorageContract.Setup(x => x.AddElement(It.IsAny<PostDataModel>()))
.Callback((PostDataModel x) => .Callback((PostDataModel x) =>
{ {
flag = x.Id == record.Id && x.PostName == record.PostName && x.PostType == record.PostType && x.Salary == record.Salary && flag = x.Id == record.Id && x.PostName == record.PostName && x.PostType == record.PostType && x.Salary == record.Salary;
x.ChangeDate == record.ChangeDate;
}); });
//Act //Act
_postBusinessLogicContract.InsertPost(record); _postBusinessLogicContract.InsertPost(record);
@@ -258,7 +249,7 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
_postStorageContract.Setup(x => x.AddElement(It.IsAny<PostDataModel>())).Throws(new ElementExistsException("Data", "Data")); _postStorageContract.Setup(x => x.AddElement(It.IsAny<PostDataModel>())).Throws(new ElementExistsException("Data", "Data"));
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10, true, DateTime.UtcNow)), Throws.TypeOf<ElementExistsException>()); Assert.That(() => _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10)), Throws.TypeOf<ElementExistsException>());
_postStorageContract.Verify(x => x.AddElement(It.IsAny<PostDataModel>()), Times.Once); _postStorageContract.Verify(x => x.AddElement(It.IsAny<PostDataModel>()), Times.Once);
} }
@@ -274,7 +265,7 @@ internal class PostBusinessLogicContractTests
public void InsertPost_InvalidRecord_ThrowException_Test() public void InsertPost_InvalidRecord_ThrowException_Test()
{ {
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.InsertPost(new PostDataModel("id", "name", PostType.Manager, 10, true, DateTime.UtcNow)), Throws.TypeOf<ValidationException>()); Assert.That(() => _postBusinessLogicContract.InsertPost(new PostDataModel("id", "name", PostType.Manager, 10)), Throws.TypeOf<ValidationException>());
_postStorageContract.Verify(x => x.AddElement(It.IsAny<PostDataModel>()), Times.Never); _postStorageContract.Verify(x => x.AddElement(It.IsAny<PostDataModel>()), Times.Never);
} }
@@ -284,7 +275,7 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
_postStorageContract.Setup(x => x.AddElement(It.IsAny<PostDataModel>())).Throws(new StorageException(new InvalidOperationException())); _postStorageContract.Setup(x => x.AddElement(It.IsAny<PostDataModel>())).Throws(new StorageException(new InvalidOperationException()));
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10, true, DateTime.UtcNow)), Throws.TypeOf<StorageException>()); Assert.That(() => _postBusinessLogicContract.InsertPost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10)), Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => x.AddElement(It.IsAny<PostDataModel>()), Times.Once); _postStorageContract.Verify(x => x.AddElement(It.IsAny<PostDataModel>()), Times.Once);
} }
@@ -293,12 +284,11 @@ internal class PostBusinessLogicContractTests
{ {
//Arrange //Arrange
var flag = false; var flag = false;
var record = new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 10, true, DateTime.UtcNow.AddDays(-1)); var record = new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 10);
_postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>())) _postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>()))
.Callback((PostDataModel x) => .Callback((PostDataModel x) =>
{ {
flag = x.Id == record.Id && x.PostName == record.PostName && x.PostType == record.PostType && x.Salary == record.Salary && flag = x.Id == record.Id && x.PostName == record.PostName && x.PostType == record.PostType && x.Salary == record.Salary;
x.ChangeDate == record.ChangeDate;
}); });
//Act //Act
_postBusinessLogicContract.UpdatePost(record); _postBusinessLogicContract.UpdatePost(record);
@@ -313,7 +303,7 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
_postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>())).Throws(new ElementNotFoundException("")); _postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>())).Throws(new ElementNotFoundException(""));
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10, true, DateTime.UtcNow)), Throws.TypeOf<ElementNotFoundException>()); Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10)), Throws.TypeOf<ElementNotFoundException>());
_postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Once); _postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Once);
} }
@@ -323,7 +313,7 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
_postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>())).Throws(new ElementExistsException("Data", "Data")); _postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>())).Throws(new ElementExistsException("Data", "Data"));
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "anme", PostType.Manager, 10, true, DateTime.UtcNow)), Throws.TypeOf<ElementExistsException>()); Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "anme", PostType.Manager, 10)), Throws.TypeOf<ElementExistsException>());
_postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Once); _postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Once);
} }
@@ -339,7 +329,7 @@ internal class PostBusinessLogicContractTests
public void UpdatePost_InvalidRecord_ThrowException_Test() public void UpdatePost_InvalidRecord_ThrowException_Test()
{ {
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.UpdatePost(new PostDataModel("id", "name", PostType.Manager, 10, true, DateTime.UtcNow)), Throws.TypeOf<ValidationException>()); Assert.That(() => _postBusinessLogicContract.UpdatePost(new PostDataModel("id", "name", PostType.Manager, 10)), Throws.TypeOf<ValidationException>());
_postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Never); _postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Never);
} }
@@ -349,7 +339,7 @@ internal class PostBusinessLogicContractTests
//Arrange //Arrange
_postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>())).Throws(new StorageException(new InvalidOperationException())); _postStorageContract.Setup(x => x.UpdElement(It.IsAny<PostDataModel>())).Throws(new StorageException(new InvalidOperationException()));
//Act&Assert //Act&Assert
Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10, true, DateTime.UtcNow)), Throws.TypeOf<StorageException>()); Assert.That(() => _postBusinessLogicContract.UpdatePost(new(Guid.NewGuid().ToString(), "name", PostType.Manager, 10)), Throws.TypeOf<StorageException>());
_postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Once); _postStorageContract.Verify(x => x.UpdElement(It.IsAny<PostDataModel>()), Times.Once);
} }

View File

@@ -164,7 +164,7 @@ internal class SalaryBusinessLogicContractTests
public void GetAllSalariesByEmployee_EmployeeIdIsNotGuid_ThrowException_Test() public void GetAllSalariesByEmployee_EmployeeIdIsNotGuid_ThrowException_Test()
{ {
//Act&Assert //Act&Assert
Assert.That(() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByEmployee(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), "workerId"), Throws.TypeOf<ValidationException>()); Assert.That(() => _salaryBusinessLogicContract.GetAllSalariesByPeriodByEmployee(DateTime.UtcNow, DateTime.UtcNow.AddDays(1), "employeeId"), Throws.TypeOf<ValidationException>());
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Never); _salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>()), Times.Never);
} }
@@ -191,12 +191,12 @@ internal class SalaryBusinessLogicContractTests
{ {
//Arrange //Arrange
var employeeId = Guid.NewGuid().ToString(); var employeeId = Guid.NewGuid().ToString();
var saleSum = 200.0; var saleSum = 1.2 * 5;
var postSalary = 2000.0; var postSalary = 2000.0;
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, saleSum, DiscountType.None, 0, false, [])]); .Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, DiscountType.None, false, [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, postSalary, true, DateTime.UtcNow)); .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, postSalary));
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); .Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
var sum = 0.0; var sum = 0.0;
@@ -213,7 +213,7 @@ internal class SalaryBusinessLogicContractTests
} }
[Test] [Test]
public void CalculateSalaryByMounth_WithSeveralWorkers_Test() public void CalculateSalaryByMounth_WithSeveralEmployees_Test()
{ {
//Arrange //Arrange
var employee1Id = Guid.NewGuid().ToString(); var employee1Id = Guid.NewGuid().ToString();
@@ -225,13 +225,13 @@ internal class SalaryBusinessLogicContractTests
new(employee3Id, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false) new(employee3Id, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)
}; };
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns([new SaleDataModel(Guid.NewGuid().ToString(), employee1Id, null, 1, DiscountType.None, 0, false, []), .Returns([new SaleDataModel(Guid.NewGuid().ToString(), employee1Id, null, DiscountType.None, false, []),
new SaleDataModel(Guid.NewGuid().ToString(), employee1Id, null, 1, DiscountType.None, 0, false, []), new SaleDataModel(Guid.NewGuid().ToString(), employee1Id, null, DiscountType.None, false, []),
new SaleDataModel(Guid.NewGuid().ToString(), employee2Id, null, 1, DiscountType.None, 0, false, []), new SaleDataModel(Guid.NewGuid().ToString(), employee2Id, null, DiscountType.None, false, []),
new SaleDataModel(Guid.NewGuid().ToString(), employee3Id, null, 1, DiscountType.None, 0, false, []), new SaleDataModel(Guid.NewGuid().ToString(), employee3Id, null, DiscountType.None, false, []),
new SaleDataModel(Guid.NewGuid().ToString(), employee3Id, null, 1, DiscountType.None, 0, false, [])]); new SaleDataModel(Guid.NewGuid().ToString(), employee3Id, null, DiscountType.None, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000, true, DateTime.UtcNow)); .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000));
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns(list); .Returns(list);
//Act //Act
@@ -241,7 +241,7 @@ internal class SalaryBusinessLogicContractTests
} }
[Test] [Test]
public void CalculateSalaryByMounth_WithoutSalesByWorker_Test() public void CalculateSalaryByMounth_WithoutSalesByEmployee_Test()
{ {
//Arrange //Arrange
var postSalary = 2000.0; var postSalary = 2000.0;
@@ -249,7 +249,7 @@ internal class SalaryBusinessLogicContractTests
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.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", PostType.Manager, postSalary, true, DateTime.UtcNow)); .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, postSalary));
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); .Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
var sum = 0.0; var sum = 0.0;
@@ -271,7 +271,7 @@ internal class SalaryBusinessLogicContractTests
//Arrange //Arrange
var employeeId = Guid.NewGuid().ToString(); var employeeId = 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", PostType.Manager, 2000, true, DateTime.UtcNow)); .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000));
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); .Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
//Act&Assert //Act&Assert
@@ -284,22 +284,22 @@ internal class SalaryBusinessLogicContractTests
//Arrange //Arrange
var employeeId = Guid.NewGuid().ToString(); var employeeId = Guid.NewGuid().ToString();
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, 200, DiscountType.None, 0, false, [])]); .Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, DiscountType.None, false, [])]);
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); .Returns([new EmployeeDataModel(employeeId, "Test", "abc@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
//Act&Assert //Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMounth(DateTime.UtcNow), Throws.TypeOf<NullListException>()); Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMounth(DateTime.UtcNow), Throws.TypeOf<NullListException>());
} }
[Test] [Test]
public void CalculateSalaryByMounth_WorkerStorageReturnNull_ThrowException_Test() public void CalculateSalaryByMounth_EmployeeStorageReturnNull_ThrowException_Test()
{ {
//Arrange //Arrange
var employeeId = Guid.NewGuid().ToString(); var employeeId = Guid.NewGuid().ToString();
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, 200, DiscountType.None, 0, false, [])]); .Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, DiscountType.None, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000, true, DateTime.UtcNow)); .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000));
//Act&Assert //Act&Assert
Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMounth(DateTime.UtcNow), Throws.TypeOf<NullListException>()); Assert.That(() => _salaryBusinessLogicContract.CalculateSalaryByMounth(DateTime.UtcNow), Throws.TypeOf<NullListException>());
} }
@@ -312,7 +312,7 @@ internal class SalaryBusinessLogicContractTests
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Throws(new StorageException(new InvalidOperationException())); .Throws(new StorageException(new InvalidOperationException()));
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000, true, DateTime.UtcNow)); .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000));
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]); .Returns([new EmployeeDataModel(employeeId, "Test", "123@gmail.com", Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
//Act&Assert //Act&Assert
@@ -325,7 +325,7 @@ internal class SalaryBusinessLogicContractTests
//Arrange //Arrange
var employeeId = Guid.NewGuid().ToString(); var employeeId = Guid.NewGuid().ToString();
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, 200, DiscountType.None, 0, false, [])]); .Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, DiscountType.None, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Throws(new StorageException(new InvalidOperationException())); .Throws(new StorageException(new InvalidOperationException()));
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
@@ -335,14 +335,14 @@ internal class SalaryBusinessLogicContractTests
} }
[Test] [Test]
public void CalculateSalaryByMounth_WorkerStorageThrowException_ThrowException_Test() public void CalculateSalaryByMounth_EmployeeStorageThrowException_ThrowException_Test()
{ {
//Arrange //Arrange
var employeeId = Guid.NewGuid().ToString(); var employeeId = Guid.NewGuid().ToString();
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())) _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, 200, DiscountType.None, 0, false, [])]); .Returns([new SaleDataModel(Guid.NewGuid().ToString(), employeeId, null, DiscountType.None, false, [])]);
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>())) _postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000, true, DateTime.UtcNow)); .Returns(new PostDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 2000));
_employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>())) _employeeStorageContract.Setup(x => x.GetList(It.IsAny<bool>(), It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
.Throws(new StorageException(new InvalidOperationException())); .Throws(new StorageException(new InvalidOperationException()));
//Act&Assert //Act&Assert

View File

@@ -39,10 +39,10 @@ internal class SaleBusinessLogicContractTests
var date = DateTime.UtcNow; var date = DateTime.UtcNow;
var listOriginal = new List<SaleDataModel>() var listOriginal = new List<SaleDataModel>()
{ {
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false,
[new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]), [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)]),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
}; };
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal); _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal);
//Act //Act
@@ -103,10 +103,10 @@ internal class SaleBusinessLogicContractTests
var employeeId = Guid.NewGuid().ToString(); var employeeId = Guid.NewGuid().ToString();
var listOriginal = new List<SaleDataModel>() var listOriginal = new List<SaleDataModel>()
{ {
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false,
[new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]), [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)]),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
}; };
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal); _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal);
//Act //Act
@@ -184,10 +184,10 @@ internal class SaleBusinessLogicContractTests
var clientId = Guid.NewGuid().ToString(); var clientId = Guid.NewGuid().ToString();
var listOriginal = new List<SaleDataModel>() var listOriginal = new List<SaleDataModel>()
{ {
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false,
[new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]), [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)]),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
}; };
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal); _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal);
//Act //Act
@@ -265,10 +265,10 @@ internal class SaleBusinessLogicContractTests
var cocktailId = Guid.NewGuid().ToString(); var cocktailId = Guid.NewGuid().ToString();
var listOriginal = new List<SaleDataModel>() var listOriginal = new List<SaleDataModel>()
{ {
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false,
[new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]), [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)]),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, DiscountType.None, false, []),
}; };
_saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal); _saleStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(), It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal);
//Act //Act
@@ -343,8 +343,8 @@ internal class SaleBusinessLogicContractTests
{ {
//Arrange //Arrange
var id = Guid.NewGuid().ToString(); var id = Guid.NewGuid().ToString();
var record = new SaleDataModel(id, Guid.NewGuid().ToString(), null, 10, DiscountType.None, 0, false, var record = new SaleDataModel(id, Guid.NewGuid().ToString(), null, DiscountType.None, false,
[new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]); [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)]);
_saleStorageContract.Setup(x => x.GetElementById(id)).Returns(record); _saleStorageContract.Setup(x => x.GetElementById(id)).Returns(record);
//Act //Act
var element = _saleBusinessLogicContract.GetSaleByData(id); var element = _saleBusinessLogicContract.GetSaleByData(id);
@@ -394,8 +394,8 @@ internal class SaleBusinessLogicContractTests
{ {
//Arrange //Arrange
var flag = false; var flag = false;
var record = new SaleDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, DiscountType.None, 10, var record = new SaleDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DiscountType.None,
false, [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]); false, [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)]);
_saleStorageContract.Setup(x => x.AddElement(It.IsAny<SaleDataModel>())) _saleStorageContract.Setup(x => x.AddElement(It.IsAny<SaleDataModel>()))
.Callback((SaleDataModel x) => .Callback((SaleDataModel x) =>
{ {
@@ -420,7 +420,7 @@ internal class SaleBusinessLogicContractTests
_saleStorageContract.Setup(x => x.AddElement(It.IsAny<SaleDataModel>())).Throws(new ElementExistsException("Data", "Data")); _saleStorageContract.Setup(x => x.AddElement(It.IsAny<SaleDataModel>())).Throws(new ElementExistsException("Data", "Data"));
//Act&Assert //Act&Assert
Assert.That(() => _saleBusinessLogicContract.InsertSale(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Assert.That(() => _saleBusinessLogicContract.InsertSale(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),
Guid.NewGuid().ToString(), 10, DiscountType.None, 10, false, [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf<ElementExistsException>()); Guid.NewGuid().ToString(), DiscountType.None, false, [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)])), Throws.TypeOf<ElementExistsException>());
_saleStorageContract.Verify(x => x.AddElement(It.IsAny<SaleDataModel>()), Times.Once); _saleStorageContract.Verify(x => x.AddElement(It.IsAny<SaleDataModel>()), Times.Once);
} }
@@ -436,7 +436,7 @@ internal class SaleBusinessLogicContractTests
public void InsertSale_InvalidRecord_ThrowException_Test() public void InsertSale_InvalidRecord_ThrowException_Test()
{ {
//Act&Assert //Act&Assert
Assert.That(() => _saleBusinessLogicContract.InsertSale(new SaleDataModel("id", Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, DiscountType.None, 10, false, [])), Throws.TypeOf<ValidationException>()); Assert.That(() => _saleBusinessLogicContract.InsertSale(new SaleDataModel("id", Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DiscountType.None, false, [])), Throws.TypeOf<ValidationException>());
_saleStorageContract.Verify(x => x.AddElement(It.IsAny<SaleDataModel>()), Times.Never); _saleStorageContract.Verify(x => x.AddElement(It.IsAny<SaleDataModel>()), Times.Never);
} }
@@ -447,7 +447,7 @@ internal class SaleBusinessLogicContractTests
_saleStorageContract.Setup(x => x.AddElement(It.IsAny<SaleDataModel>())).Throws(new StorageException(new InvalidOperationException())); _saleStorageContract.Setup(x => x.AddElement(It.IsAny<SaleDataModel>())).Throws(new StorageException(new InvalidOperationException()));
//Act&Assert //Act&Assert
Assert.That(() => _saleBusinessLogicContract.InsertSale(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Assert.That(() => _saleBusinessLogicContract.InsertSale(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),
Guid.NewGuid().ToString(), 10, DiscountType.None, 10, false, [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf<StorageException>()); Guid.NewGuid().ToString(), DiscountType.None, false, [new SaleTourDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 1.2)])), Throws.TypeOf<StorageException>());
_saleStorageContract.Verify(x => x.AddElement(It.IsAny<SaleDataModel>()), Times.Once); _saleStorageContract.Verify(x => x.AddElement(It.IsAny<SaleDataModel>()), Times.Once);
} }

View File

@@ -14,41 +14,41 @@ internal class PostDataModelTests
[Test] [Test]
public void IdIsNullOrEmptyTest() public void IdIsNullOrEmptyTest()
{ {
var post = CreateDataModel(null, "name", PostType.Manager, 10, true, DateTime.UtcNow); var post = CreateDataModel(null, "name", PostType.Manager, 10);
Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>());
post = CreateDataModel(string.Empty, "name", PostType.Manager, 10, true, DateTime.UtcNow); post = CreateDataModel(string.Empty, "name", PostType.Manager, 10);
Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void IdIsNotGuidTest() public void IdIsNotGuidTest()
{ {
var post = CreateDataModel("id", "name", PostType.Manager, 10, true, DateTime.UtcNow); var post = CreateDataModel("id", "name", PostType.Manager, 10);
Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void PostNameIsEmptyTest() public void PostNameIsEmptyTest()
{ {
var manufacturer = CreateDataModel(Guid.NewGuid().ToString(), null, PostType.Manager, 10, true, DateTime.UtcNow); var manufacturer = CreateDataModel(Guid.NewGuid().ToString(), null, PostType.Manager, 10);
Assert.That(() => manufacturer.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => manufacturer.Validate(), Throws.TypeOf<ValidationException>());
manufacturer = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, PostType.Manager, 10, true, DateTime.UtcNow); manufacturer = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, PostType.Manager, 10);
Assert.That(() => manufacturer.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => manufacturer.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void PostTypeIsNoneTest() public void PostTypeIsNoneTest()
{ {
var post = CreateDataModel(Guid.NewGuid().ToString(), "name", PostType.None, 10, true, DateTime.UtcNow); var post = CreateDataModel(Guid.NewGuid().ToString(), "name", PostType.None, 10);
Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void SalaryIsLessOrZeroTest() public void SalaryIsLessOrZeroTest()
{ {
var post = CreateDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 0, true, DateTime.UtcNow); var post = CreateDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, 0);
Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>());
post = CreateDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, -10, true, DateTime.UtcNow); post = CreateDataModel(Guid.NewGuid().ToString(), "name", PostType.Manager, -10);
Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => post.Validate(), Throws.TypeOf<ValidationException>());
} }
@@ -56,13 +56,10 @@ internal class PostDataModelTests
public void AllFieldsIsCorrectTest() public void AllFieldsIsCorrectTest()
{ {
var postId = Guid.NewGuid().ToString(); var postId = Guid.NewGuid().ToString();
var postPostId = Guid.NewGuid().ToString();
var postName = "name"; var postName = "name";
var postType = PostType.Manager; var postType = PostType.Manager;
var salary = 10; var salary = 10;
var isActual = false; var post = CreateDataModel(postId, postName, postType, salary);
var changeDate = DateTime.UtcNow.AddDays(-1);
var post = CreateDataModel(postId, postName, postType, salary, isActual, changeDate);
Assert.That(() => post.Validate(), Throws.Nothing); Assert.That(() => post.Validate(), Throws.Nothing);
Assert.Multiple(() => Assert.Multiple(() =>
{ {
@@ -70,11 +67,9 @@ 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, string? postName, PostType postType, double salary, bool isActual, DateTime changeDate) => private static PostDataModel CreateDataModel(string? id, string? postName, PostType postType, double salary) =>
new(id, postName, postType, salary, isActual, changeDate); new(id, postName, postType, salary);
} }

View File

@@ -15,89 +15,120 @@ internal class SaleDataModelTests
[Test] [Test]
public void IdIsNullOrEmptyTest() public void IdIsNullOrEmptyTest()
{ {
var sale = CreateDataModel(null, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, CreateSubDataModel()); var sale = CreateDataModel(null, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DiscountType.OnSale, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
sale = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, CreateSubDataModel()); sale = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DiscountType.OnSale, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void IdIsNotGuidTest() public void IdIsNotGuidTest()
{ {
var sale = CreateDataModel("id", Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, CreateSubDataModel()); var sale = CreateDataModel("id", Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DiscountType.OnSale, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void EmployeeIdIsNullOrEmptyTest() public void EmployeeIdIsNullOrEmptyTest()
{ {
var sale = CreateDataModel(Guid.NewGuid().ToString(), null, Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, CreateSubDataModel()); var sale = CreateDataModel(Guid.NewGuid().ToString(), null, Guid.NewGuid().ToString(), DiscountType.OnSale, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
sale = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, CreateSubDataModel()); sale = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, Guid.NewGuid().ToString(), DiscountType.OnSale, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void EmployeeIdIsNotGuidTest() public void EmployeeIdIsNotGuidTest()
{ {
var sale = CreateDataModel(Guid.NewGuid().ToString(), "employeeId", Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, CreateSubDataModel()); var sale = CreateDataModel(Guid.NewGuid().ToString(), "employeeId", Guid.NewGuid().ToString(), DiscountType.OnSale, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void ClientIdIsNotGuidTest() public void ClientIdIsNotGuidTest()
{ {
var sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "clientId", 10, DiscountType.OnSale, 10, false, CreateSubDataModel()); var sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "clientId", DiscountType.OnSale, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SumIsLessOrZeroTest()
{
var sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 0, DiscountType.OnSale, 10, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), -10, DiscountType.OnSale, 10, false, CreateSubDataModel());
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void ToursIsNullOrEmptyTest() public void ToursIsNullOrEmptyTest()
{ {
var sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, null); var sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DiscountType.OnSale, false, null);
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, DiscountType.OnSale, 10, false, []); sale = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DiscountType.OnSale, false, []);
Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => sale.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test]
public void CalcSumAndDiscountTest()
{
var saleId = Guid.NewGuid().ToString();
var employeeId = Guid.NewGuid().ToString();
var clientId = Guid.NewGuid().ToString();
var tours = new List<SaleTourDataModel>()
{
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 2, 1.1),
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1, 1.3)
};
var isCancel = false;
var totalSum = tours.Sum(x => x.Price * x.Count);
var saleNone = CreateDataModel(saleId, employeeId, clientId, DiscountType.None, isCancel, tours);
Assert.Multiple(() =>
{
Assert.That(saleNone.Sum, Is.EqualTo(totalSum));
Assert.That(saleNone.Discount, Is.EqualTo(0));
});
var saleOnSale = CreateDataModel(saleId, employeeId, clientId, DiscountType.OnSale, isCancel, tours);
Assert.Multiple(() =>
{
Assert.That(saleOnSale.Sum, Is.EqualTo(totalSum));
Assert.That(saleOnSale.Discount, Is.EqualTo(totalSum * 0.1));
});
var saleRegularCustomer = CreateDataModel(saleId, employeeId, clientId, DiscountType.RegularCustomer, isCancel, tours);
Assert.Multiple(() =>
{
Assert.That(saleRegularCustomer.Sum, Is.EqualTo(totalSum));
Assert.That(saleRegularCustomer.Discount, Is.EqualTo(totalSum * 0.5));
});
var saleCertificate = CreateDataModel(saleId, employeeId, clientId, DiscountType.Certificate, isCancel, tours);
Assert.Multiple(() =>
{
Assert.That(saleCertificate.Sum, Is.EqualTo(totalSum));
Assert.That(saleCertificate.Discount, Is.EqualTo(totalSum * 0.3));
});
var saleMulty = CreateDataModel(saleId, employeeId, clientId, DiscountType.Certificate | DiscountType.RegularCustomer, isCancel, tours);
Assert.Multiple(() =>
{
Assert.That(saleMulty.Sum, Is.EqualTo(totalSum));
Assert.That(saleMulty.Discount, Is.EqualTo(totalSum * 0.8));
});
}
[Test] [Test]
public void AllFieldsIsCorrectTest() public void AllFieldsIsCorrectTest()
{ {
var saleId = Guid.NewGuid().ToString(); var saleId = Guid.NewGuid().ToString();
var employeeId = Guid.NewGuid().ToString(); var employeeId = Guid.NewGuid().ToString();
var clientId = Guid.NewGuid().ToString(); var clientId = Guid.NewGuid().ToString();
var sum = 10;
var discountType = DiscountType.Certificate; var discountType = DiscountType.Certificate;
var discount = 1;
var isCancel = true; var isCancel = true;
var tours = CreateSubDataModel(); var tours = CreateSubDataModel();
var sale = CreateDataModel(saleId, employeeId, clientId, sum, discountType, discount, isCancel, tours); var sale = CreateDataModel(saleId, employeeId, clientId, discountType, isCancel, tours);
Assert.That(() => sale.Validate(), Throws.Nothing); Assert.That(() => sale.Validate(), Throws.Nothing);
Assert.Multiple(() => Assert.Multiple(() =>
{ {
Assert.That(sale.Id, Is.EqualTo(saleId)); Assert.That(sale.Id, Is.EqualTo(saleId));
Assert.That(sale.EmployeeId, Is.EqualTo(employeeId)); Assert.That(sale.EmployeeId, Is.EqualTo(employeeId));
Assert.That(sale.ClientId, Is.EqualTo(clientId)); Assert.That(sale.ClientId, Is.EqualTo(clientId));
Assert.That(sale.Sum, Is.EqualTo(sum));
Assert.That(sale.DiscountType, Is.EqualTo(discountType)); Assert.That(sale.DiscountType, Is.EqualTo(discountType));
Assert.That(sale.Discount, Is.EqualTo(discount));
Assert.That(sale.IsCancel, Is.EqualTo(isCancel)); Assert.That(sale.IsCancel, Is.EqualTo(isCancel));
Assert.That(sale.Tours, Is.EquivalentTo(tours)); Assert.That(sale.Tours, Is.EquivalentTo(tours));
}); });
} }
private static SaleDataModel CreateDataModel(string? id, string? employeeId, string? clientId, double sum, DiscountType discountType, private static SaleDataModel CreateDataModel(string? id, string? employeeId, string? clientId, DiscountType discountType, bool isCancel, List<SaleTourDataModel>? tours) =>
double discount, bool isCancel, List<SaleTourDataModel>? tours) => new(id, employeeId, clientId, discountType, isCancel, tours);
new(id, employeeId, clientId, sum, discountType, discount, isCancel, tours);
private static List<SaleTourDataModel> CreateSubDataModel() private static List<SaleTourDataModel> CreateSubDataModel()
=> [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1)]; => [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1, 1.1)];
} }

View File

@@ -14,41 +14,50 @@ internal class SaleTourDataModelTests
[Test] [Test]
public void SaleIdIsNullOrEmptyTest() public void SaleIdIsNullOrEmptyTest()
{ {
var saleTour = CreateDataModel(null, Guid.NewGuid().ToString(), 10); var saleTour = CreateDataModel(null, Guid.NewGuid().ToString(), 10, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
saleTour = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), 10); saleTour = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), 10, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void SaleIdIsNotGuidTest() public void SaleIdIsNotGuidTest()
{ {
var saleTour = CreateDataModel("saleId", Guid.NewGuid().ToString(), 10); var saleTour = CreateDataModel("saleId", Guid.NewGuid().ToString(), 10, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void CocktailIdIsNullOrEmptyTest() public void TourIdIsNullOrEmptyTest()
{ {
var saleTour = CreateDataModel(Guid.NewGuid().ToString(), null, 10); var saleTour = CreateDataModel(Guid.NewGuid().ToString(), null, 10, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
saleTour = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), 10); saleTour = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), 10, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void ProductIdIsNotGuidTest() public void TourIdIsNotGuidTest()
{ {
var saleTour = CreateDataModel(Guid.NewGuid().ToString(), "productId", 10); var saleTour = CreateDataModel(Guid.NewGuid().ToString(), "tourId", 10, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void CountIsLessOrZeroTest() public void CountIsLessOrZeroTest()
{ {
var saleTour = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 0); var saleTour = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 0, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
saleTour = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), -10); saleTour = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), -10, 1.1);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void PriceIsLessOrZeroTest()
{
var saleTour = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1, 0);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
saleTour = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1, -10);
Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => saleTour.Validate(), Throws.TypeOf<ValidationException>());
} }
@@ -58,16 +67,18 @@ internal class SaleTourDataModelTests
var saleId = Guid.NewGuid().ToString(); var saleId = Guid.NewGuid().ToString();
var tourId = Guid.NewGuid().ToString(); var tourId = Guid.NewGuid().ToString();
var count = 10; var count = 10;
var saleCocktail = CreateDataModel(saleId, tourId, count); var price = 1.2;
Assert.That(() => saleCocktail.Validate(), Throws.Nothing); var saleTour = CreateDataModel(saleId, tourId, count, price);
Assert.That(() => saleTour.Validate(), Throws.Nothing);
Assert.Multiple(() => Assert.Multiple(() =>
{ {
Assert.That(saleCocktail.SaleId, Is.EqualTo(saleId)); Assert.That(saleTour.SaleId, Is.EqualTo(saleId));
Assert.That(saleCocktail.TourId, Is.EqualTo(tourId)); Assert.That(saleTour.TourId, Is.EqualTo(tourId));
Assert.That(saleCocktail.Count, Is.EqualTo(count)); Assert.That(saleTour.Count, Is.EqualTo(count));
Assert.That(saleTour.Price, Is.EqualTo(price));
}); });
} }
private static SaleTourDataModel CreateDataModel(string? saleId, string? tourId, int count) => private static SaleTourDataModel CreateDataModel(string? saleId, string? tourId, int count, double price) =>
new(saleId, tourId, count); new(saleId, tourId, count, price);
} }

View File

@@ -3,6 +3,7 @@ using MagicCarpetContracts.Enums;
using MagicCarpetContracts.Exceptions; using MagicCarpetContracts.Exceptions;
using MagicCarpetDatabase.Implementations; using MagicCarpetDatabase.Implementations;
using MagicCarpetDatabase.Models; using MagicCarpetDatabase.Models;
using MagicCarpetTests.Infrastructure;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -16,7 +17,7 @@ namespace MagicCarpetTests.StoragesContracts;
[TestFixture] [TestFixture]
internal class SaleStorageContractTests : BaseStorageContractTest internal class SaleStorageContractTests : BaseStorageContractTest
{ {
private SaleStorageContract _saleStorageContract; private SaleStorageContract _saletStorageContract;
private Client _client; private Client _client;
private Employee _employee; private Employee _employee;
private Tour _tour; private Tour _tour;
@@ -24,28 +25,28 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[SetUp] [SetUp]
public void SetUp() public void SetUp()
{ {
_saleStorageContract = new SaleStorageContract(MagicCarpetDbContext); _saletStorageContract = new SaleStorageContract(MagicCarpetDbContext);
_client = InsertClientToDatabaseAndReturn(); _client = MagicCarpetDbContext.InsertClientToDatabaseAndReturn();
_employee = InsertEmployeeToDatabaseAndReturn(); _employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn();
_tour = InsertTourToDatabaseAndReturn(); _tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn();
} }
[TearDown] [TearDown]
public void TearDown() public void TearDown()
{ {
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Sales\" CASCADE;"); MagicCarpetDbContext.RemoveSalesFromDatabase();
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Clients\" CASCADE;"); MagicCarpetDbContext.RemoveEmployeesFromDatabase();
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Employees\" CASCADE;"); MagicCarpetDbContext.RemoveClientsFromDatabase();
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Tours\" CASCADE;"); MagicCarpetDbContext.RemoveToursFromDatabase();
} }
[Test] [Test]
public void Try_GetList_WhenHaveRecords_Test() public void Try_GetList_WhenHaveRecords_Test()
{ {
var sale = InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)]); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 5)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 5, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(_tour.Id, 10)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(_tour.Id, 10, 1.2)]);
var list = _saleStorageContract.GetList(); var list = _saletStorageContract.GetList();
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3)); Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(x => x.Id == sale.Id), sale); AssertElement(list.First(x => x.Id == sale.Id), sale);
@@ -54,7 +55,7 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_WhenNoRecords_Test() public void Try_GetList_WhenNoRecords_Test()
{ {
var list = _saleStorageContract.GetList(); var list = _saletStorageContract.GetList();
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Is.Empty); Assert.That(list, Is.Empty);
} }
@@ -62,11 +63,11 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByPeriod_Test() public void Try_GetList_ByPeriod_Test()
{ {
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-3), tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, null, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, null, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, null, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, null, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(3), tours: [(_tour.Id, 1, 1.2)]);
var list = _saleStorageContract.GetList(startDate: DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1)); var list = _saletStorageContract.GetList(startDate: DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1));
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(2)); Assert.That(list, Has.Count.EqualTo(2));
} }
@@ -74,11 +75,11 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByEmployeeId_Test() public void Try_GetList_ByEmployeeId_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn("Other employee"); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Other employee");
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(employee.Id, null, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, null, tours: [(_tour.Id, 1, 1.2)]);
var list = _saleStorageContract.GetList(employeeId: _employee.Id); var list = _saletStorageContract.GetList(employeeId: _employee.Id);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(2)); Assert.That(list, Has.Count.EqualTo(2));
Assert.That(list.All(x => x.EmployeeId == _employee.Id)); Assert.That(list.All(x => x.EmployeeId == _employee.Id));
@@ -87,12 +88,12 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByClientId_Test() public void Try_GetList_ByClientId_Test()
{ {
var client = InsertClientToDatabaseAndReturn("Other fio", "+8-888-888-88-88"); var client = MagicCarpetDbContext.InsertClientToDatabaseAndReturn(fio: "Other fio", phoneNumber: "+8-888-888-88-88");
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, client.Id, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, client.Id, tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(_tour.Id, 1, 1.2)]);
var list = _saleStorageContract.GetList(clientId: _client.Id); var list = _saletStorageContract.GetList(clientId: _client.Id);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(2)); Assert.That(list, Has.Count.EqualTo(2));
Assert.That(list.All(x => x.ClientId == _client.Id)); Assert.That(list.All(x => x.ClientId == _client.Id));
@@ -101,31 +102,31 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByTourId_Test() public void Try_GetList_ByTourId_Test()
{ {
var tour = InsertTourToDatabaseAndReturn("Other name"); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourName: "Other name");
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 5)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 5, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1), (tour.Id, 4)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2), (tour.Id, 4, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(tour.Id, 1), (_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, null, tours: [(tour.Id, 1, 1.2), (_tour.Id, 1, 1.2)]);
var list = _saleStorageContract.GetList(tourId: _tour.Id); var list = _saletStorageContract.GetList(tourId: _tour.Id);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3)); Assert.That(list, Has.Count.EqualTo(3));
Assert.That(list.All(x => x.Tours.Any(y => y.TourId == _tour.Id))); Assert.That(list.All(x => x.Tours!.Any(y => y.TourId == _tour.Id)));
} }
[Test] [Test]
public void Try_GetList_ByAllParameters_Test() public void Try_GetList_ByAllParameters_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn("Other employee"); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Other employee");
var client = InsertClientToDatabaseAndReturn("Other fio", "+8-888-888-88-88"); var client = MagicCarpetDbContext.InsertClientToDatabaseAndReturn(fio: "Other fio", phoneNumber: "+8-888-888-88-88");
var tour = InsertTourToDatabaseAndReturn("Other name"); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourName: "Other name");
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-3), tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(employee.Id, null, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, null, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(-1).AddMinutes(3), tours: [(tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, client.Id, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, client.Id, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(_tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(tour.Id, 1, 1.2)]);
InsertSaleToDatabaseAndReturn(employee.Id, null, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, null, saleDate: DateTime.UtcNow.AddDays(1).AddMinutes(-3), tours: [(_tour.Id, 1, 1.2)]);
var list = _saleStorageContract.GetList(startDate: DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1), employeeId: _employee.Id, clientId: _client.Id, tourId: tour.Id); var list = _saletStorageContract.GetList(startDate: DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1), employeeId: _employee.Id, clientId: _client.Id, tourId: tour.Id);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(1)); Assert.That(list, Has.Count.EqualTo(1));
} }
@@ -133,46 +134,46 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetElementById_WhenHaveRecord_Test() public void Try_GetElementById_WhenHaveRecord_Test()
{ {
var sale = InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)]); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)]);
AssertElement(_saleStorageContract.GetElementById(sale.Id), sale); AssertElement(_saletStorageContract.GetElementById(sale.Id), sale);
} }
[Test] [Test]
public void Try_GetElementById_WhenNoRecord_Test() public void Try_GetElementById_WhenNoRecord_Test()
{ {
InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)]);
Assert.That(() => _saleStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); Assert.That(() => _saletStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
} }
[Test] [Test]
public void Try_GetElementById_WhenRecordHasCanceled_Test() public void Try_GetElementById_WhenRecordHasCanceled_Test()
{ {
var sale = InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)], isCancel: true); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)], isCancel: true);
AssertElement(_saleStorageContract.GetElementById(sale.Id), sale); AssertElement(_saletStorageContract.GetElementById(sale.Id), sale);
} }
[Test] [Test]
public void Try_AddElement_Test() public void Try_AddElement_Test()
{ {
var sale = CreateModel(Guid.NewGuid().ToString(), _employee.Id, _client.Id, 1, DiscountType.RegularCustomer, 1, false, [_tour.Id]); var sale = CreateModel(Guid.NewGuid().ToString(), _employee.Id, _client.Id, DiscountType.RegularCustomer, false, [_tour.Id]);
_saleStorageContract.AddElement(sale); _saletStorageContract.AddElement(sale);
AssertElement(GetSaleFromDatabaseById(sale.Id), sale); AssertElement(MagicCarpetDbContext.GetSaleFromDatabaseById(sale.Id), sale);
} }
[Test] [Test]
public void Try_AddElement_WhenIsDeletedIsTrue_Test() public void Try_AddElement_WhenIsDeletedIsTrue_Test()
{ {
var sale = CreateModel(Guid.NewGuid().ToString(), _employee.Id, _client.Id, 1, DiscountType.RegularCustomer, 1, true, [_tour.Id]); var sale = CreateModel(Guid.NewGuid().ToString(), _employee.Id, _client.Id, DiscountType.RegularCustomer, true, [_tour.Id]);
Assert.That(() => _saleStorageContract.AddElement(sale), Throws.Nothing); Assert.That(() => _saletStorageContract.AddElement(sale), Throws.Nothing);
AssertElement(GetSaleFromDatabaseById(sale.Id), CreateModel(sale.Id, _employee.Id, _client.Id, 1, DiscountType.RegularCustomer, 1, false, [_tour.Id])); AssertElement(MagicCarpetDbContext.GetSaleFromDatabaseById(sale.Id), CreateModel(sale.Id, _employee.Id, _client.Id, DiscountType.RegularCustomer, false, [_tour.Id]));
} }
[Test] [Test]
public void Try_DelElement_Test() public void Try_DelElement_Test()
{ {
var sale = InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)], isCancel: false); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)], isCancel: false);
_saleStorageContract.DelElement(sale.Id); _saletStorageContract.DelElement(sale.Id);
var element = GetSaleFromDatabaseById(sale.Id); var element = MagicCarpetDbContext.GetSaleFromDatabaseById(sale.Id);
Assert.Multiple(() => Assert.Multiple(() =>
{ {
Assert.That(element, Is.Not.Null); Assert.That(element, Is.Not.Null);
@@ -183,53 +184,14 @@ internal class SaleStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_DelElement_WhenNoRecordWithThisId_Test() public void Try_DelElement_WhenNoRecordWithThisId_Test()
{ {
Assert.That(() => _saleStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>()); Assert.That(() => _saletStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>());
} }
[Test] [Test]
public void Try_DelElement_WhenRecordWasCanceled_Test() public void Try_DelElement_WhenRecordWasCanceled_Test()
{ {
var sale = InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1)], isCancel: true); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employee.Id, _client.Id, tours: [(_tour.Id, 1, 1.2)], isCancel: true);
Assert.That(() => _saleStorageContract.DelElement(sale.Id), Throws.TypeOf<ElementDeletedException>()); Assert.That(() => _saletStorageContract.DelElement(sale.Id), Throws.TypeOf<ElementDeletedException>());
}
private Client InsertClientToDatabaseAndReturn(string fio = "test", string phoneNumber = "+7-777-777-77-77")
{
var client = new Client() { Id = Guid.NewGuid().ToString(), FIO = fio, PhoneNumber = phoneNumber, DiscountSize = 10 };
MagicCarpetDbContext.Clients.Add(client);
MagicCarpetDbContext.SaveChanges();
return client;
}
private Employee InsertEmployeeToDatabaseAndReturn(string fio = "test", string employeeEmail = "abc@gmail.com")
{
var employee = new Employee() { Id = Guid.NewGuid().ToString(), FIO = fio, Email = employeeEmail, PostId = Guid.NewGuid().ToString() };
MagicCarpetDbContext.Employees.Add(employee);
MagicCarpetDbContext.SaveChanges();
return employee;
}
private Tour InsertTourToDatabaseAndReturn(string tourName = "test", TourType tourType = TourType.Sightseeing, double price = 1)
{
var tour = new Tour() { Id = Guid.NewGuid().ToString(), TourName = tourName, Type = tourType, Price = price };
MagicCarpetDbContext.Tours.Add(tour);
MagicCarpetDbContext.SaveChanges();
return tour;
}
private Sale InsertSaleToDatabaseAndReturn(string employeeId, string? clientId, DateTime? saleDate = null, double sum = 1, DiscountType discountType = DiscountType.OnSale, double discount = 0, bool isCancel = false, List<(string, int)>? tours = null)
{
var sale = new Sale() { EmployeeId = employeeId, ClientId = clientId, SaleDate = saleDate ?? DateTime.UtcNow, Sum = sum, DiscountType = discountType, Discount = discount, IsCancel = isCancel, SaleTours = [] };
if (tours is not null)
{
foreach (var elem in tours)
{
sale.SaleTours.Add(new SaleTour { TourId = elem.Item1, SaleId = sale.Id, Count = elem.Item2 });
}
}
MagicCarpetDbContext.Sales.Add(sale);
MagicCarpetDbContext.SaveChanges();
return sale;
} }
private static void AssertElement(SaleDataModel? actual, Sale expected) private static void AssertElement(SaleDataModel? actual, Sale expected)
@@ -264,14 +226,12 @@ internal class SaleStorageContractTests : BaseStorageContractTest
} }
} }
private static SaleDataModel CreateModel(string id, string employeeId, string? clientId, double sum, DiscountType discountType, double discount, bool isCancel, List<string> tourIds) private static SaleDataModel CreateModel(string id, string employeeId, string? clientId, DiscountType discountType, bool isCancel, List<string> tourIds)
{ {
var tours = tourIds.Select(x => new SaleTourDataModel(id, x, 1)).ToList(); var tours = tourIds.Select(x => new SaleTourDataModel(id, x, 1, 1.1)).ToList();
return new(id, employeeId, clientId, sum, discountType, discount, isCancel, tours); return new(id, employeeId, clientId, discountType, isCancel, tours);
} }
private Sale? GetSaleFromDatabaseById(string id) => MagicCarpetDbContext.Sales.Include(x => x.SaleTours).FirstOrDefault(x => x.Id == id);
private static void AssertElement(Sale? actual, SaleDataModel expected) private static void AssertElement(Sale? actual, SaleDataModel expected)
{ {
Assert.That(actual, Is.Not.Null); Assert.That(actual, Is.Not.Null);
@@ -295,6 +255,7 @@ internal class SaleStorageContractTests : BaseStorageContractTest
{ {
Assert.That(actual.SaleTours[i].TourId, Is.EqualTo(expected.Tours[i].TourId)); Assert.That(actual.SaleTours[i].TourId, Is.EqualTo(expected.Tours[i].TourId));
Assert.That(actual.SaleTours[i].Count, Is.EqualTo(expected.Tours[i].Count)); Assert.That(actual.SaleTours[i].Count, Is.EqualTo(expected.Tours[i].Count));
Assert.That(actual.SaleTours[i].Price, Is.EqualTo(expected.Tours[i].Price));
}); });
} }
} }

View File

@@ -0,0 +1,216 @@
using MagicCarpetContracts.ViewModels;
using MagicCarpetTests.Infrastructure;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace MagicCarpetTests.WebApiControllersTests;
[TestFixture]
internal class SalaryControllerTests : BaseWebApiControllerTest
{
[TearDown]
public void TearDown()
{
MagicCarpetDbContext.RemovePostsFromDatabase();
MagicCarpetDbContext.RemoveToursFromDatabase();
MagicCarpetDbContext.RemoveEmployeesFromDatabase();
MagicCarpetDbContext.RemoveSalariesFromDatabase();
}
[Test]
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
{
//Arrange
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
var salary = MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, employeeSalary: 100);
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id);
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id);
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
Assert.Multiple(() =>
{
Assert.That(data, Is.Not.Null);
Assert.That(data, Has.Count.EqualTo(3));
});
}
[Test]
public async Task GetList_WhenNoRecords_ShouldSuccess_Test()
{
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
Assert.Multiple(() =>
{
Assert.That(data, Is.Not.Null);
Assert.That(data, Has.Count.EqualTo(0));
});
}
[Test]
public async Task GetList_OnlyInDatePeriod_ShouldSuccess_Test()
{
//Arrange
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(2));
});
}
[Test]
public async Task GetList_WhenDateIsIncorrect_ShouldBadRequest_Test()
{
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task GetList_ByEmployee_ShouldSuccess_Test()
{
//Arrange
var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id);
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id);
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id);
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={employee1.Id}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(2));
Assert.That(data.All(x => x.EmployeeId == employee1.Id));
});
}
[Test]
public async Task GetList_ByEmployee_OnlyInDatePeriod_ShouldSuccess_Test()
{
//Arrange
var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={employee1.Id}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(2));
Assert.That(data.All(x => x.EmployeeId == employee1.Id));
});
}
[Test]
public async Task GetList_ByEmployee_WhenDateIsIncorrect_ShouldBadRequest_Test()
{
//Arrange
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&id={employee.Id}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task GetList_ByEmployee_WhenIdIsNotGuid_ShouldBadRequest_Test()
{
//Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id=id");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Calculate_ShouldSuccess_Test()
{
//Arrange
var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000);
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.", postId: post.PostId);
var furniture = MagicCarpetDbContext.InsertTourToDatabaseAndReturn();
//Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var salaries = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee.Id);
Assert.Multiple(() =>
{
Assert.That(salaries, Has.Length.EqualTo(1));
Assert.That(salaries.First().EmployeeSalary, Is.EqualTo(1000.5));
Assert.That(salaries.First().SalaryDate.Month, Is.EqualTo(DateTime.UtcNow.Month));
});
}
[Test]
public async Task Calculate_WithoutEmployees_ShouldSuccess_Test()
{
//Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var salaries = MagicCarpetDbContext.Salaries.ToArray();
Assert.That(salaries, Has.Length.EqualTo(0));
}
[Test]
public async Task Calculate_WithoutSalesByEmployee_ShouldSuccess_Test()
{
//Arrange
var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000);
var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 1", postId: post.PostId);
var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 2", postId: post.PostId);
var man = MagicCarpetDbContext.InsertTourToDatabaseAndReturn();
//Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var salary1 = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee1.Id).First().EmployeeSalary;
var salary2 = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee2.Id).First().EmployeeSalary;
Assert.That(salary1, Is.Not.EqualTo(salary2));
}
[Test]
public async Task Calculate_PostNotFound_ShouldNotFound_Test()
{
//Arrange
MagicCarpetDbContext.InsertPostToDatabaseAndReturn();
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name", postId: Guid.NewGuid().ToString());
var furniture = MagicCarpetDbContext.InsertTourToDatabaseAndReturn();
//Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
}
}

View File

@@ -0,0 +1,119 @@
using AutoMapper;
using MagicCarpetContracts.AdapterContracts.OperationResponses;
using MagicCarpetContracts.AdapterContracts;
using MagicCarpetContracts.BuisnessLogicContracts;
using MagicCarpetContracts.Exceptions;
using MagicCarpetContracts.ViewModels;
using MagicCarpetContracts.DataModels;
namespace MagicCarpetWebApi.Adapters;
public class SalaryAdapter : ISalaryAdapter
{
private readonly ISalaryBusinessLogicContract _salaryBusinessLogicContract;
private readonly ILogger _logger;
private readonly Mapper _mapper;
public SalaryAdapter(ISalaryBusinessLogicContract salaryBusinessLogicContract, ILogger<SalaryAdapter> logger)
{
_salaryBusinessLogicContract = salaryBusinessLogicContract;
_logger = logger;
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SalaryDataModel, SalaryViewModel>();
});
_mapper = new Mapper(config);
}
public SalaryOperationResponse GetListByPeriod(DateTime fromDate, DateTime toDate)
{
try
{
return SalaryOperationResponse.OK([.. _salaryBusinessLogicContract.GetAllSalariesByPeriod(fromDate, toDate).Select(x => _mapper.Map<SalaryViewModel>(x))]);
}
catch (ValidationException ex)
{
_logger.LogError(ex, "ValidationException");
return SalaryOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
}
catch (IncorrectDatesException ex)
{
_logger.LogError(ex, "IncorrectDatesException");
return SalaryOperationResponse.BadRequest($"Incorrect dates: {ex.Message}");
}
catch (NullListException)
{
_logger.LogError("NullListException");
return SalaryOperationResponse.NotFound("The list is not initialized");
}
catch (StorageException ex)
{
_logger.LogError(ex, "StorageException");
return SalaryOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
}
catch (Exception ex)
{
_logger.LogError(ex, "Exception");
return SalaryOperationResponse.InternalServerError(ex.Message);
}
}
public SalaryOperationResponse GetListByPeriodByEmployee(DateTime fromDate, DateTime toDate, string workerId)
{
try
{
return SalaryOperationResponse.OK([.. _salaryBusinessLogicContract.GetAllSalariesByPeriodByEmployee(fromDate, toDate, workerId).Select(x => _mapper.Map<SalaryViewModel>(x))]);
}
catch (ValidationException ex)
{
_logger.LogError(ex, "ValidationException");
return SalaryOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
}
catch (IncorrectDatesException ex)
{
_logger.LogError(ex, "IncorrectDatesException");
return SalaryOperationResponse.BadRequest($"Incorrect dates: {ex.Message}");
}
catch (NullListException)
{
_logger.LogError("NullListException");
return SalaryOperationResponse.NotFound("The list is not initialized");
}
catch (StorageException ex)
{
_logger.LogError(ex, "StorageException");
return SalaryOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
}
catch (Exception ex)
{
_logger.LogError(ex, "Exception");
return SalaryOperationResponse.InternalServerError(ex.Message);
}
}
public SalaryOperationResponse CalculateSalary(DateTime date)
{
try
{
_salaryBusinessLogicContract.CalculateSalaryByMounth(date);
return SalaryOperationResponse.NoContent();
}
catch (NullListException)
{
_logger.LogError("NullListException");
return SalaryOperationResponse.NotFound("The list is not initialized");
}
catch (StorageException ex)
{
_logger.LogError(ex, "StorageException");
return SalaryOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
}
catch (Exception ex)
{
_logger.LogError(ex, "Exception");
return SalaryOperationResponse.InternalServerError(ex.Message);
}
}
}

View File

@@ -0,0 +1,33 @@
using MagicCarpetContracts.AdapterContracts;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace MagicCarpetWebApi.Controllers;
[Authorize]
[Route("api/[controller]/[action]")]
[ApiController]
[Produces("application/json")]
public class SalariesController(ISalaryAdapter adapter) : ControllerBase
{
private readonly ISalaryAdapter _adapter = adapter;
[HttpGet]
public IActionResult GetRecords(DateTime fromDate, DateTime toDate)
{
return _adapter.GetListByPeriod(fromDate, toDate).GetResponse(Request, Response);
}
[HttpGet]
public IActionResult GetEmployeeRecords(string id, DateTime fromDate, DateTime toDate)
{
return _adapter.GetListByPeriodByEmployee(fromDate, toDate, id).GetResponse(Request, Response);
}
[HttpPost]
public IActionResult Calculate(DateTime date)
{
return _adapter.CalculateSalary(date).GetResponse(Request, Response);
}
}