From 92c7cac2107796cd3ea13adcf6c55e1e67ca164f Mon Sep 17 00:00:00 2001 From: Aidar Date: Tue, 11 Feb 2025 17:33:57 +0400 Subject: [PATCH] =?UTF-8?q?=20LabWork=201.1.0=20(=D0=A0=D0=B5=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataModels/BuyerDataModel.cs | 2 + .../DataModels/DishDataModel.cs | 13 +-- .../DataModels/DishHistoryDataModel.cs | 4 +- .../DataModels/OrderDataModel.cs | 6 +- .../DataModels/OrderDishDataModel.cs | 4 +- .../DataModels/PostDataModel.cs | 2 +- .../DataModels/SalaryDataModel.cs | 4 +- .../DataModels/WorkerDataModel.cs | 10 +- .../Enums/Ingredients.cs | 10 ++ .../DataModelsTests/BuyerDataModelTests.cs | 33 +++---- .../DataModelsTests/DishDataModelTests.cs | 73 ++++++++++++++ .../DishHistoryDataModelTests.cs | 47 +++++++++ .../DataModelsTests/OrderDataModelTests.cs | 96 ++++++++++++++++++ .../OrderDishDataModelTests.cs | 62 ++++++++++++ .../DataModelsTests/PostDataModelTests.cs | 85 ++++++++++++++++ .../DataModelsTests/SalaryDataModelTests.cs | 47 +++++++++ .../DataModelsTests/WorkerDataModelTests.cs | 97 +++++++++++++++++++ 17 files changed, 554 insertions(+), 41 deletions(-) create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/Enums/Ingredients.cs create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishDataModelTests.cs create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishHistoryDataModelTests.cs create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDataModelTests.cs create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDishDataModelTests.cs create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/PostDataModelTests.cs create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/SalaryDataModelTests.cs create mode 100644 BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/WorkerDataModelTests.cs diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/BuyerDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/BuyerDataModel.cs index b10c41d..5fc42d0 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/BuyerDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/BuyerDataModel.cs @@ -18,6 +18,8 @@ public class BuyerDataModel(string id, string fio, string phoneNumber, int score throw new ValidationException("The value in the field Id is not a unique identifier"); if (FIO.IsEmpty()) throw new ValidationException("Field FIO is empty"); + if (!Regex.IsMatch(FIO, @"\b[А-ЯЁ][а-яё]*\b \b[А-ЯЁ][а-яё]*\b \b[А-ЯЁ][а-яё]*\b")) + throw new ValidationException("Field FIO is not a FIO"); if (PhoneNumber.IsEmpty()) throw new ValidationException("Field PhoneNumber is empty"); if (!Regex.IsMatch(PhoneNumber, @"^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\-]?)?[\d\- ]{7,10}$")) diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishDataModel.cs index ebd61aa..6e15d2d 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishDataModel.cs @@ -1,14 +1,13 @@ using BitterlyAndExclamationMarkContracts.Enums; +using BitterlyAndExclamationMarkContracts.Exceptions; using BitterlyAndExclamationMarkContracts.Extensions; using BitterlyAndExclamationMarkContracts.Infrastructure; -using System.ComponentModel.DataAnnotations; - -public class DishDataModel(string id, string dishName, DishType dishType, string сookId, double price, bool isDeleted) : IValidation +public class DishDataModel(string id, string dishName, DishType dishType, Ingredients ingredients, double price, bool isDeleted) : IValidation { public string Id { get; private set; } = id; public string DishName { get; private set; } = dishName; public DishType DishType { get; private set; } = dishType; - public string СookId { get; private set; } = сookId; + public Ingredients Ingredients { get; private set; } = ingredients; public double Price { get; private set; } = price; public bool IsDeleted { get; private set; } = isDeleted; public void Validate() @@ -21,10 +20,8 @@ public class DishDataModel(string id, string dishName, DishType dishType, string throw new ValidationException("Field DishName is empty"); if (DishType == DishType.None) throw new ValidationException("Field DishType is empty"); - if (СookId.IsEmpty()) - throw new ValidationException("Field СookId is empty"); - if (!СookId.IsGuid()) - throw new ValidationException("The value in the field СookId is not a unique identifier"); + if (Ingredients == Ingredients.None) + throw new ValidationException("Field Ingredients is empty"); if (Price <= 0) throw new ValidationException("Field Price is less than or equal to 0"); } diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishHistoryDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishHistoryDataModel.cs index a8606ef..f7799f8 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishHistoryDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/DishHistoryDataModel.cs @@ -1,6 +1,6 @@ -using BitterlyAndExclamationMarkContracts.Extensions; +using BitterlyAndExclamationMarkContracts.Exceptions; +using BitterlyAndExclamationMarkContracts.Extensions; using BitterlyAndExclamationMarkContracts.Infrastructure; -using System.ComponentModel.DataAnnotations; namespace BitterlyAndExclamationMarkContracts.DataModels; public class DishHistoryDataModel(string dishId, double oldPrice) : IValidation diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDataModel.cs index 97e1eca..b5d4dc5 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDataModel.cs @@ -1,18 +1,16 @@ using BitterlyAndExclamationMarkContracts.Enums; +using BitterlyAndExclamationMarkContracts.Exceptions; using BitterlyAndExclamationMarkContracts.Extensions; using BitterlyAndExclamationMarkContracts.Infrastructure; -using System.ComponentModel.DataAnnotations; namespace BitterlyAndExclamationMarkContracts.DataModels; -public class OrderDataModel(string id, string workerId, string? buyerId, double sum, DiscountType discountType, double discount, bool isCancel, List dishes) : IValidation +public class OrderDataModel(string id, string workerId, string? buyerId, double sum, bool isCancel, List dishes) : IValidation { public string Id { get; private set; } = id; public string WorkerId { get; private set; } = workerId; public string? BuyerId { get; private set; } = buyerId; public DateTime OrderDate { get; private set; } = DateTime.UtcNow; public double Sum { get; private set; } = sum; - public DiscountType DiscountType { get; private set; } = discountType; - public double Discount { get; private set; } = discount; public bool IsCancel { get; private set; } = isCancel; public List Dishes { get; private set; } = dishes; public void Validate() diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDishDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDishDataModel.cs index aa24074..f966a4a 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDishDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/OrderDishDataModel.cs @@ -1,6 +1,6 @@ -using BitterlyAndExclamationMarkContracts.Extensions; +using BitterlyAndExclamationMarkContracts.Exceptions; +using BitterlyAndExclamationMarkContracts.Extensions; using BitterlyAndExclamationMarkContracts.Infrastructure; -using System.ComponentModel.DataAnnotations; namespace BitterlyAndExclamationMarkContracts.DataModels; public class OrderDishDataModel(string orderId, string dishId, int count) : IValidation diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/PostDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/PostDataModel.cs index debb2ed..b665112 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/PostDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/PostDataModel.cs @@ -1,7 +1,7 @@ using BitterlyAndExclamationMarkContracts.Enums; +using BitterlyAndExclamationMarkContracts.Exceptions; using BitterlyAndExclamationMarkContracts.Extensions; using BitterlyAndExclamationMarkContracts.Infrastructure; -using System.ComponentModel.DataAnnotations; namespace BitterlyAndExclamationMarkContracts.DataModels; public class PostDataModel(string id, string postId, string postName, PostType postType, double salary, bool isActual, DateTime changeDate) : IValidation diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/SalaryDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/SalaryDataModel.cs index 2bedef0..612d74b 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/SalaryDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/SalaryDataModel.cs @@ -1,6 +1,6 @@ -using BitterlyAndExclamationMarkContracts.Extensions; +using BitterlyAndExclamationMarkContracts.Exceptions; +using BitterlyAndExclamationMarkContracts.Extensions; using BitterlyAndExclamationMarkContracts.Infrastructure; -using System.ComponentModel.DataAnnotations; namespace BitterlyAndExclamationMarkContracts.DataModels; public class SalaryDataModel(string workerId, DateTime salaryDate, double workerSalary) : IValidation diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/WorkerDataModel.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/WorkerDataModel.cs index 140ea28..e250ef5 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/WorkerDataModel.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/DataModels/WorkerDataModel.cs @@ -1,6 +1,7 @@ -using BitterlyAndExclamationMarkContracts.Extensions; +using BitterlyAndExclamationMarkContracts.Exceptions; +using BitterlyAndExclamationMarkContracts.Extensions; using BitterlyAndExclamationMarkContracts.Infrastructure; -using System.ComponentModel.DataAnnotations; +using System.Text.RegularExpressions; namespace BitterlyAndExclamationMarkContracts.DataModels; public class WorkerDataModel(string id, string fio, string postId, DateTime birthDate, DateTime employmentDate, bool isDeleted) : IValidation @@ -19,6 +20,8 @@ public class WorkerDataModel(string id, string fio, string postId, DateTime birt throw new ValidationException("The value in the field Id is not a unique identifier"); if (FIO.IsEmpty()) throw new ValidationException("Field FIO is empty"); + if (!Regex.IsMatch(FIO, @"\b[А-ЯЁ][а-яё]*\b \b[А-ЯЁ][а-яё]*\b \b[А-ЯЁ][а-яё]*\b")) + throw new ValidationException("Field FIO is not a FIO"); if (PostId.IsEmpty()) throw new ValidationException("Field PostId is empty"); if (!PostId.IsGuid()) @@ -30,8 +33,5 @@ public class WorkerDataModel(string id, string fio, string postId, DateTime birt if ((EmploymentDate - BirthDate).TotalDays / 365 < 18) // EmploymentDate.Year - BirthDate.Year throw new ValidationException($"Minors cannot be hired " + $"(EmploymentDate - {EmploymentDate.ToShortDateString()}, BirthDate - {BirthDate.ToShortDateString()})"); - if ((EmploymentDate - BirthDate).TotalDays / 365 > 80) // EmploymentDate.Year - BirthDate.Year - throw new ValidationException($"Elders cannot be hired " + - $"(EmploymentDate - {EmploymentDate.ToShortDateString()}, BirthDate - {BirthDate.ToShortDateString()})"); } } \ No newline at end of file diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/Enums/Ingredients.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/Enums/Ingredients.cs new file mode 100644 index 0000000..8ec2de8 --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkContracts/Enums/Ingredients.cs @@ -0,0 +1,10 @@ +namespace BitterlyAndExclamationMarkContracts.Enums; + +[Flags] +public enum Ingredients +{ + None = 0, + Meat = 1, + Milk = 2, + Peanut = 4 +} diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/BuyerDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/BuyerDataModelTests.cs index 206d7c6..1dfd5a0 100644 --- a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/BuyerDataModelTests.cs +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/BuyerDataModelTests.cs @@ -8,51 +8,50 @@ internal class BuyerDataModelTests [Test] public void IdIsNullOrEmptyTest() { - var buyer = CreateDataModel(null, "fio", "number", 10); - Assert.That(() => buyer.Validate(), - Throws.TypeOf()); - buyer = CreateDataModel(string.Empty, "fio", "number", 10); - Assert.That(() => buyer.Validate(), - Throws.TypeOf()); + var buyer = CreateDataModel(null, "Фамилия Имя Отчество", "+7-777-777-77-77", 10); + Assert.That(() => buyer.Validate(), Throws.TypeOf()); + buyer = CreateDataModel(string.Empty, "Фамилия Имя Отчество", "+7-777-777-77-77", 10); Assert.That(() => buyer.Validate(), Throws.TypeOf()); } [Test] public void IdIsNotGuidTest() { - var buyer = CreateDataModel("id", "fio", "number", 10); + var buyer = CreateDataModel("id", "Фамилия Имя Отчество", "+7-777-777-77-77", 10); Assert.That(() => buyer.Validate(), Throws.TypeOf()); } - [Test] public void FIOIsNullOrEmptyTest() { - var buyer = CreateDataModel(Guid.NewGuid().ToString(), null, "number", 10); + var buyer = CreateDataModel(Guid.NewGuid().ToString(), null, "+7-777-777-77-77", 10); Assert.That(() => buyer.Validate(), Throws.TypeOf()); - buyer = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "number", 10); + buyer = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "+7-777-777-77-77", 10); + Assert.That(() => buyer.Validate(), Throws.TypeOf()); + } + [Test] + public void FIOIsIncorrectTest() + { + var buyer = CreateDataModel(Guid.NewGuid().ToString(), "Ф", "+7-777-777-77-77", 10); Assert.That(() => buyer.Validate(), Throws.TypeOf()); } - [Test] public void PhoneNumberIsNullOrEmptyTest() { - var buyer = CreateDataModel(Guid.NewGuid().ToString(), "fio", null, 10); + var buyer = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", null, 10); Assert.That(() => buyer.Validate(), Throws.TypeOf()); - buyer = CreateDataModel(Guid.NewGuid().ToString(), "fio", string.Empty, 10); + buyer = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", string.Empty, 10); Assert.That(() => buyer.Validate(), Throws.TypeOf()); } - [Test] public void PhoneNumberIsIncorrectTest() { - var buyer = CreateDataModel(Guid.NewGuid().ToString(), "fio", "777", 10); + var buyer = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", "777", 10); Assert.That(() => buyer.Validate(), Throws.TypeOf()); } - [Test] public void AllFieldsIsCorrectTest() { var buyerId = Guid.NewGuid().ToString(); - var fio = "Fio"; + var fio = "Фамилия Имя Отчество"; var phoneNumber = "+7-777-777-77-77"; var scoreCount = 11; var buyer = CreateDataModel(buyerId, fio, phoneNumber, scoreCount); diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishDataModelTests.cs new file mode 100644 index 0000000..092ac50 --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishDataModelTests.cs @@ -0,0 +1,73 @@ +using BitterlyAndExclamationMarkContracts.Enums; +using BitterlyAndExclamationMarkContracts.Exceptions; +namespace BitterlyAndExclamationMarkTests.DataModelsTests; + +[TestFixture] +internal class DishDataModelTests +{ + [Test] + public void IdIsNullOrEmptyTest() + { + var dish = CreateDataModel(null, "name", DishType.Soups, Ingredients.Meat, 10, false); + Assert.That(() => dish.Validate(),Throws.TypeOf()); + dish = CreateDataModel(string.Empty, "name", DishType.Soups, Ingredients.Meat, 10, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void IdIsNotGuidTest() + { + var dish = CreateDataModel("id", "name", DishType.Soups, Ingredients.Meat, 10, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void DishNameIsEmptyTest() + { + var dish = CreateDataModel(Guid.NewGuid().ToString(), null, DishType.Soups, Ingredients.Meat, 10, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + dish = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, DishType.Soups, Ingredients.Meat, 10, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void DishTypeIsNoneTest() + { + var dish = CreateDataModel(Guid.NewGuid().ToString(), null, DishType.None, Ingredients.Meat, 10, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void IngredientsIsNoneTest() + { + var dish = CreateDataModel(Guid.NewGuid().ToString(), null, DishType.None, Ingredients.Meat, 10, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void PriceIsLessOrZeroTest() + { + var dish = CreateDataModel(Guid.NewGuid().ToString(), "name", DishType.Soups, Ingredients.Meat, 0, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + dish = CreateDataModel(Guid.NewGuid().ToString(), "name", DishType.Soups, Ingredients.Meat, - 10, false); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void AllFieldsIsCorrectTest() + { + var dishId = Guid.NewGuid().ToString(); + var dishName = "name"; + var dishType = DishType.Soups; + var ingredients = Ingredients.Meat; + var dishPrice = 10; + var dishIsDelete = false; + var dish = CreateDataModel(dishId, dishName, dishType, ingredients, dishPrice, dishIsDelete); + Assert.That(() => dish.Validate(), Throws.Nothing); + Assert.Multiple(() => + { + Assert.That(dish.Id, Is.EqualTo(dishId)); + Assert.That(dish.DishName, Is.EqualTo(dishName)); + Assert.That(dish.DishType, Is.EqualTo(dishType)); + Assert.That(dish.Price, Is.EqualTo(dishPrice)); + Assert.That(dish.IsDeleted, Is.EqualTo(dishIsDelete)); + }); + } + private static DishDataModel CreateDataModel(string? id, string? dishName, DishType dishType, Ingredients ingredients, + double price, bool isDeleted) => + new(id, dishName, dishType, ingredients, price, isDeleted); +} \ No newline at end of file diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishHistoryDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishHistoryDataModelTests.cs new file mode 100644 index 0000000..6f273c6 --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/DishHistoryDataModelTests.cs @@ -0,0 +1,47 @@ +using BitterlyAndExclamationMarkContracts.DataModels; +using BitterlyAndExclamationMarkContracts.Exceptions; +namespace BitterlyAndExclamationMarkTests.DataModelsTests; + +[TestFixture] +internal class DishHistoryDataModelTests +{ + [Test] + public void DishIdIsNullOrEmptyTest() + { + var dish = CreateDataModel(null, 10); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + dish = CreateDataModel(string.Empty, 10); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void DishIdIsNotGuidTest() + { + var dish = CreateDataModel("id", 10); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void OldPriceIsLessOrZeroTest() + { + var dish = CreateDataModel(Guid.NewGuid().ToString(), 0); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + dish = CreateDataModel(Guid.NewGuid().ToString(), -10); + Assert.That(() => dish.Validate(), Throws.TypeOf()); + } + [Test] + public void AllFieldsIsCorrectTest() + { + var dishId = Guid.NewGuid().ToString(); + var oldPrice = 10; + var dishHistory = CreateDataModel(dishId, oldPrice); + Assert.That(() => dishHistory.Validate(), Throws.Nothing); + Assert.Multiple(() => + { + Assert.That(dishHistory.DishId, Is.EqualTo(dishId)); + Assert.That(dishHistory.OldPrice, Is.EqualTo(oldPrice)); + Assert.That(dishHistory.ChangeDate, Is.LessThan(DateTime.UtcNow)); + Assert.That(dishHistory.ChangeDate, Is.GreaterThan(DateTime.UtcNow.AddMinutes(-1))); + }); + } + private static DishHistoryDataModel CreateDataModel(string? dishId, double oldPrice) => + new(dishId, oldPrice); +} \ No newline at end of file diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDataModelTests.cs new file mode 100644 index 0000000..928873b --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDataModelTests.cs @@ -0,0 +1,96 @@ +using BitterlyAndExclamationMarkContracts.DataModels; +using BitterlyAndExclamationMarkContracts.Enums; +using BitterlyAndExclamationMarkContracts.Exceptions; + +namespace BitterlyAndExclamationMarkTests.DataModelsTests; + +[TestFixture] +internal class OrderDataModelTests +{ + [Test] + public void IdIsNullOrEmptyTest() + { + var order = CreateDataModel(null, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), + 10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + order = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), + 10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + } + [Test] + public void IdIsNotGuidTest() + { + var order = CreateDataModel("id", Guid.NewGuid().ToString(), + Guid.NewGuid().ToString(), 10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + } + [Test] + public void WorkerIdIsNullOrEmptyTest() + { + var order = CreateDataModel(Guid.NewGuid().ToString(), null, Guid.NewGuid().ToString(), + 10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + order = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, Guid.NewGuid().ToString(), + 10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + } + [Test] + public void WorkerIdIsNotGuidTest() + { + var order = CreateDataModel(Guid.NewGuid().ToString(), "workerId", Guid.NewGuid().ToString(), + 10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + } + [Test] + public void BuyerIdIsNotGuidTest() + { + var order = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "buyerId", + 10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + } + [Test] + public void SumIsLessOrZeroTest() + { + var order = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), + 0, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + order = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), + -10, false, CreateSubDataModel()); + Assert.That(() => order.Validate(), Throws.TypeOf()); + } + [Test] + public void DishsIsNullOrEmptyTest() + { + var order = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), + 10, false, null); + Assert.That(() => order.Validate(), Throws.TypeOf()); + order = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), + 10, false, []); + Assert.That(() => order.Validate(), Throws.TypeOf()); + } + [Test] + public void AllFieldsIsCorrectTest() + { + var orderId = Guid.NewGuid().ToString(); + var workerId = Guid.NewGuid().ToString(); + var buyerId = Guid.NewGuid().ToString(); + var sum = 10; + var isCancel = true; + var dishes = CreateSubDataModel(); + var order = CreateDataModel(orderId, workerId, buyerId, sum, isCancel, dishes); + Assert.That(() => order.Validate(), Throws.Nothing); + Assert.Multiple(() => + { + Assert.That(order.Id, Is.EqualTo(orderId)); + Assert.That(order.WorkerId, Is.EqualTo(workerId)); + Assert.That(order.BuyerId, Is.EqualTo(buyerId)); + Assert.That(order.Sum, Is.EqualTo(sum)); + Assert.That(order.IsCancel, Is.EqualTo(isCancel)); + Assert.That(order.Dishes, Is.EquivalentTo(dishes)); + }); + } + private static OrderDataModel CreateDataModel(string? id, string? workerId, string? buyerId, double sum, + bool isCancel, List? dishes) => + new(id, workerId, buyerId, sum, isCancel, dishes); + private static List CreateSubDataModel() => [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1)]; +} \ No newline at end of file diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDishDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDishDataModelTests.cs new file mode 100644 index 0000000..e59feda --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/OrderDishDataModelTests.cs @@ -0,0 +1,62 @@ +using BitterlyAndExclamationMarkContracts.DataModels; +using BitterlyAndExclamationMarkContracts.Exceptions; + +namespace BitterlyAndExclamationMarkTests.DataModelsTests; + +[TestFixture] +internal class OrderDishDataModelTests +{ + [Test] + public void OrderIdIsNullOrEmptyTest() + { + var orderDish = CreateDataModel(null, Guid.NewGuid().ToString(), 10); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + orderDish = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), 10); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + } + [Test] + public void OrderIdIsNotGuidTest() + { + var orderDish = CreateDataModel("orderId", Guid.NewGuid().ToString(), 10); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + } + [Test] + public void DishIdIsNullOrEmptyTest() + { + var orderDish = CreateDataModel(Guid.NewGuid().ToString(), null, 10); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + orderDish = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), 10); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + } + [Test] + public void DishIdIsNotGuidTest() + { + var orderDish = CreateDataModel(Guid.NewGuid().ToString(), "dishId", 10); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + } + [Test] + public void CountIsLessOrZeroTest() + { + var orderDish = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 0); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + orderDish = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), -10); + Assert.That(() => orderDish.Validate(), Throws.TypeOf()); + } + [Test] + public void AllFieldsIsCorrectTest() + { + var orderId = Guid.NewGuid().ToString(); + var dishId = Guid.NewGuid().ToString(); + var count = 10; + var orderDish = CreateDataModel(orderId, dishId, count); + Assert.That(() => orderDish.Validate(), Throws.Nothing); + Assert.Multiple(() => + { + Assert.That(orderDish.OrderId, Is.EqualTo(orderId)); + Assert.That(orderDish.DishId, Is.EqualTo(dishId)); + Assert.That(orderDish.Count, Is.EqualTo(count)); + }); + } + private static OrderDishDataModel CreateDataModel(string? orderId, string? dishId, int count) => + new(orderId, dishId, count); +} \ No newline at end of file diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/PostDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/PostDataModelTests.cs new file mode 100644 index 0000000..94931b1 --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/PostDataModelTests.cs @@ -0,0 +1,85 @@ +using BitterlyAndExclamationMarkContracts.DataModels; +using BitterlyAndExclamationMarkContracts.Enums; +using BitterlyAndExclamationMarkContracts.Exceptions; + +namespace BitterlyAndExclamationMarkTests.DataModelsTests; + +[TestFixture] +internal class PostDataModelTests +{ + [Test] + public void IdIsNullOrEmptyTest() + { + var post = CreateDataModel(null, Guid.NewGuid().ToString(), "name", PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + post = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), "name", PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + } + [Test] + public void IdIsNotGuidTest() + { + var post = CreateDataModel("id", Guid.NewGuid().ToString(), "name", PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + } + [Test] + public void PostIdIsNullEmptyTest() + { + var post = CreateDataModel(Guid.NewGuid().ToString(), null, "name", PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + post = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "name", PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + } + [Test] + public void PostIdIsNotGuidTest() + { + var post = CreateDataModel(Guid.NewGuid().ToString(), "postId", "name", PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + } + [Test] + public void PostNameIsEmptyTest() + { + var manufacturer = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => manufacturer.Validate(), Throws.TypeOf()); + manufacturer = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), string.Empty, PostType.Assistant, 10, true, DateTime.UtcNow); + Assert.That(() => manufacturer.Validate(), Throws.TypeOf()); + } + [Test] + public void PostTypeIsNoneTest() + { + var post = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "name", PostType.None, 10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + } + [Test] + public void SalaryIsLessOrZeroTest() + { + var post = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "name", PostType.Assistant, 0, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + post = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "name", PostType.Assistant, -10, true, DateTime.UtcNow); + Assert.That(() => post.Validate(), Throws.TypeOf()); + } + [Test] + public void AllFieldsIsCorrectTest() + { + var postId = Guid.NewGuid().ToString(); + var postPostId = Guid.NewGuid().ToString(); + var postName = "name"; + var postType = PostType.Assistant; + var salary = 10; + var isActual = false; + var changeDate = DateTime.UtcNow.AddDays(-1); + var post = CreateDataModel(postId, postPostId, postName, postType, salary, isActual, changeDate); + Assert.That(() => post.Validate(), Throws.Nothing); + Assert.Multiple(() => + { + Assert.That(post.Id, Is.EqualTo(postId)); + Assert.That(post.PostId, Is.EqualTo(postPostId)); + Assert.That(post.PostName, Is.EqualTo(postName)); + Assert.That(post.PostType, Is.EqualTo(postType)); + Assert.That(post.Salary, Is.EqualTo(salary)); + Assert.That(post.IsActual, Is.EqualTo(isActual)); + Assert.That(post.ChangeDate, Is.EqualTo(changeDate)); + }); + } + private static PostDataModel CreateDataModel(string? id, string? postId, string? postName, PostType postType, double salary, bool isActual, DateTime changeDate) => + new (id, postId, postName, postType, salary, isActual, changeDate); +} \ No newline at end of file diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/SalaryDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/SalaryDataModelTests.cs new file mode 100644 index 0000000..ee9ed7e --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/SalaryDataModelTests.cs @@ -0,0 +1,47 @@ +using BitterlyAndExclamationMarkContracts.DataModels; +using BitterlyAndExclamationMarkContracts.Exceptions; +namespace BitterlyAndExclamationMarkTests.DataModelsTests; + +[TestFixture] +internal class SalaryDataModelTests +{ + [Test] + public void WorkerIdIsEmptyTest() + { + var salary = CreateDataModel(null, DateTime.Now, 10); + Assert.That(() => salary.Validate(), Throws.TypeOf()); + salary = CreateDataModel(string.Empty, DateTime.Now, 10); + Assert.That(() => salary.Validate(), Throws.TypeOf()); + } + [Test] + public void WorkerIdIsNotGuidTest() + { + var salary = CreateDataModel("workerId", DateTime.Now, 10); + Assert.That(() => salary.Validate(), Throws.TypeOf()); + } + [Test] + public void PriceIsLessOrZeroTest() + { + var salary = CreateDataModel(Guid.NewGuid().ToString(), DateTime.Now, 0); + Assert.That(() => salary.Validate(), Throws.TypeOf()); + salary = CreateDataModel(Guid.NewGuid().ToString(), DateTime.Now, - 10); + Assert.That(() => salary.Validate(), Throws.TypeOf()); + } + [Test] + public void AllFieldsIsCorrectTest() + { + var workerId = Guid.NewGuid().ToString(); + var salaryDate = DateTime.Now.AddDays(-3).AddMinutes(-5); + var workerSalary = 10; + var salary = CreateDataModel(workerId, salaryDate, workerSalary); + Assert.That(() => salary.Validate(), Throws.Nothing); + Assert.Multiple(() => + { + Assert.That(salary.WorkerId, Is.EqualTo(workerId)); + Assert.That(salary.SalaryDate, Is.EqualTo(salaryDate)); + Assert.That(salary.Salary, Is.EqualTo(workerSalary)); + }); + } + private static SalaryDataModel CreateDataModel(string? workerId, DateTime salaryDate, double workerSalary) => + new(workerId, salaryDate, workerSalary); +} \ No newline at end of file diff --git a/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/WorkerDataModelTests.cs b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/WorkerDataModelTests.cs new file mode 100644 index 0000000..3769ef0 --- /dev/null +++ b/BitterlyAndExclamationMarkProject/BitterlyAndExclamationMarkTests/DataModelsTests/WorkerDataModelTests.cs @@ -0,0 +1,97 @@ +using BitterlyAndExclamationMarkContracts.DataModels; +using BitterlyAndExclamationMarkContracts.Exceptions; +namespace BitterlyAndExclamationMarkTests.DataModelsTests; + +[TestFixture] +internal class WorkerDataModelTests +{ + [Test] + public void IdIsNullOrEmptyTest() + { + var worker = CreateDataModel(null, "Фамилия Имя Отчество", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + worker = CreateDataModel(string.Empty, "Фамилия Имя Отчество", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void IdIsNotGuidTest() + { + var worker = CreateDataModel("id", "Фамилия Имя Отчество", Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void FIOIsNullOrEmptyTest() + { + var worker = CreateDataModel(Guid.NewGuid().ToString(), null, + Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + worker = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, + Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void FIOIsIncorrectTest() + { + var worker = CreateDataModel(Guid.NewGuid().ToString(), "Ф", + Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void PostIdIsNullOrEmptyTest() + { + var worker = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", null, + DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + worker = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", + string.Empty, DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void PostIdIsNotGuidTest() + { + var worker = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", + "postId", DateTime.Now.AddYears(-18), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void BirthDateIsNotCorrectTest() + { + var worker = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", + Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18).AddDays(1), DateTime.Now, false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void BirthDateAndEmploymentDateIsNotCorrectTest() + { + var worker = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", + Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now.AddYears(- 18).AddDays(-1), false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + worker = CreateDataModel(Guid.NewGuid().ToString(), "Фамилия Имя Отчество", + Guid.NewGuid().ToString(), DateTime.Now.AddYears(-18), DateTime.Now.AddYears(- 18), false); + Assert.That(() => worker.Validate(), Throws.TypeOf()); + } + [Test] + public void AllFieldsIsCorrectTest() + { + var workerId = Guid.NewGuid().ToString(); + var fio = "Фамилия Имя Отчество"; + var postId = Guid.NewGuid().ToString(); + var birthDate = DateTime.Now.AddYears(-18).AddDays(-1); + var employmentDate = DateTime.Now; + var isDelete = false; + var worker = CreateDataModel(workerId, fio, postId, birthDate, employmentDate, isDelete); + Assert.That(() => worker.Validate(), Throws.Nothing); + Assert.Multiple(() => + { + Assert.That(worker.Id, Is.EqualTo(workerId)); + Assert.That(worker.FIO, Is.EqualTo(fio)); + Assert.That(worker.PostId, Is.EqualTo(postId)); + Assert.That(worker.BirthDate, Is.EqualTo(birthDate)); + Assert.That(worker.EmploymentDate, Is.EqualTo(employmentDate)); + Assert.That(worker.IsDeleted, Is.EqualTo(isDelete)); + }); + } + private static WorkerDataModel CreateDataModel(string? id, string? fio, + string? postId, DateTime birthDate, DateTime employmentDate, bool isDeleted) => + new(id, fio, postId, birthDate, employmentDate, isDeleted); +} \ No newline at end of file