From 48da4621c6c71273d570ef6623bb96935a9e46d8 Mon Sep 17 00:00:00 2001 From: LivelyPuer Date: Wed, 12 Feb 2025 22:16:56 +0400 Subject: [PATCH 1/5] lab1 + hard --- .../CandyHouseBase/CandyHouseBase.csproj | 70 +++++++++ .../DataModels/CustomerDataModel.cs | 36 +++++ .../DataModels/IngredientDataModel.cs | 31 ++++ .../DataModels/IngredientStockDataModel.cs | 37 +++++ .../DataModels/OrderDataModel.cs | 48 ++++++ .../DataModels/OrderItemDataModel.cs | 30 ++++ .../DataModels/PekarDataModel.cs | 31 ++++ .../DataModels/ProductDataModel.cs | 27 ++++ .../DataModels/ProductStockDataModel.cs | 37 +++++ .../DataModels/ProductionDataModel.cs | 33 +++++ .../DataModels/RecipeDataModel.cs | 27 ++++ .../DataModels/SupplyDataModel.cs | 28 ++++ .../DataModels/SupplyItemDataModel.cs | 30 ++++ .../CandyHouseBase/Enums/ItemType.cs | 8 + .../Exceptions/ValidationException.cs | 9 ++ .../Extensions/StringExtensions.cs | 10 ++ .../Infrastructure/IValidation.cs | 7 + CandyHouseSolution/CandyHouseBase/Program.cs | 9 ++ CandyHouseSolution/CandyHouseSolution.sln | 22 +++ CandyHouseSolution/CandyHouseTests/App.config | 10 ++ .../CandyHouseTests/CandyHouseTests.csproj | 140 ++++++++++++++++++ .../DataModelsTests/CustomerDataModelTests.cs | 55 +++++++ .../DataModelsTests/OrderDataModelTests.cs | 41 +++++ .../ProductStockDataModelTests.cs | 40 +++++ .../CandyHouseTests/packages.config | 19 +++ 25 files changed, 835 insertions(+) create mode 100644 CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/IngredientDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/RecipeDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs create mode 100644 CandyHouseSolution/CandyHouseBase/Exceptions/ValidationException.cs create mode 100644 CandyHouseSolution/CandyHouseBase/Extensions/StringExtensions.cs create mode 100644 CandyHouseSolution/CandyHouseBase/Infrastructure/IValidation.cs create mode 100644 CandyHouseSolution/CandyHouseBase/Program.cs create mode 100644 CandyHouseSolution/CandyHouseSolution.sln create mode 100644 CandyHouseSolution/CandyHouseTests/App.config create mode 100644 CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/packages.config diff --git a/CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj b/CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj new file mode 100644 index 0000000..a470328 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj @@ -0,0 +1,70 @@ + + + + + Debug + AnyCPU + {5DF70B46-31F7-4D15-8C60-52C0A0A364F0} + Exe + Properties + CandyHouseBase + CandyHouseBase + v4.7.1 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs new file mode 100644 index 0000000..bd167e7 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs @@ -0,0 +1,36 @@ +using System.Text.RegularExpressions; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class CustomerDataModel : IValidation + { + public string Id { get; private set; } + public string FIO { get; private set; } + public string Phone { get; private set; } + public string Email { get; private set; } + + public CustomerDataModel(string id, string fio, string phone, string email) + { + Id = id; + FIO = fio; + Phone = phone; + Email = email; + } + + public void Validate() + { + if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (FIO.IsEmpty()) throw new ValidationException("Field FIO is empty"); + if (Phone.IsEmpty()) throw new ValidationException("Field Phone is empty"); + + var phoneRegex = new Regex(@"^\+7\d{10}$"); + if (!phoneRegex.IsMatch(Phone)) throw new ValidationException("Invalid phone format"); + + if (Email.IsEmpty() || !Email.Contains("@")) throw new ValidationException("Invalid email format"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/IngredientDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/IngredientDataModel.cs new file mode 100644 index 0000000..60265c3 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/IngredientDataModel.cs @@ -0,0 +1,31 @@ +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class IngredientDataModel : IValidation + { + public string Id { get; private set; } + public string Name { get; private set; } + public string Unit { get; private set; } + public decimal Cost { get; private set; } + + public IngredientDataModel(string id, string name, string unit, decimal cost) + { + Id = id; + Name = name; + Unit = unit; + Cost = cost; + } + + public void Validate() + { + if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (Name.IsEmpty()) throw new ValidationException("Field Name is empty"); + if (Unit.IsEmpty()) throw new ValidationException("Field Unit is empty"); + if (Cost < 0) throw new ValidationException("Cost must be non-negative"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs new file mode 100644 index 0000000..b869940 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs @@ -0,0 +1,37 @@ +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class IngredientStockDataModel : IValidation + { + public string IngredientId { get; private set; } + public int Quantity { get; private set; } + + public IngredientStockDataModel(string ingredientId, int quantity) + { + IngredientId = ingredientId; + Quantity = quantity; + } + + public void Validate() + { + if (!IngredientId.IsGuid()) throw new ValidationException("IngredientId must be a GUID"); + if (Quantity < 0) throw new ValidationException("Quantity cannot be negative"); + } + + public void AddStock(int amount) + { + if (amount <= 0) throw new ValidationException("Added quantity must be positive"); + Quantity += amount; + } + + public void RemoveStock(int amount) + { + if (amount <= 0) throw new ValidationException("Removed quantity must be positive"); + if (amount > Quantity) throw new ValidationException("Not enough stock available"); + Quantity -= amount; + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs new file mode 100644 index 0000000..86f2a9f --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class OrderDataModel : IValidation + { + public string Id { get; private set; } + public string CustomerId { get; private set; } // Может быть null, если клиент разовый + public DateTime OrderDate { get; private set; } + public decimal TotalAmount { get; private set; } + public decimal DiscountAmount { get; private set; } + public List OrderItems { get; private set; } + public bool IsCompleted { get; private set; } + + public OrderDataModel(string id, string customerId, DateTime orderDate, decimal totalAmount, + decimal discountAmount, List orderItems, bool isCompleted) + { + Id = id; + CustomerId = customerId; + OrderDate = orderDate; + TotalAmount = totalAmount; + DiscountAmount = discountAmount; + OrderItems = orderItems; + IsCompleted = isCompleted; + } + + public void Validate() + { + if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (!CustomerId.IsEmpty() && !CustomerId.IsGuid()) + throw new ValidationException("CustomerId must be a GUID or empty"); + if (OrderItems == null || OrderItems.Count == 0) + throw new ValidationException("Order must contain at least one product"); + if (TotalAmount < 0) throw new ValidationException("TotalAmount cannot be negative"); + if (DiscountAmount < 0) throw new ValidationException("DiscountAmount cannot be negative"); + } + + public void MarkAsCompleted() + { + IsCompleted = true; + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs new file mode 100644 index 0000000..d55d7be --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs @@ -0,0 +1,30 @@ +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class OrderItemDataModel : IValidation + { + public string OrderId { get; private set; } + public string ProductId { get; private set; } + public int Quantity { get; private set; } + public decimal Price { get; private set; } // Цена на момент заказа + + public OrderItemDataModel(string orderId, string productId, int quantity, decimal price) + { + OrderId = orderId; + ProductId = productId; + Quantity = quantity; + Price = price; + } + + public void Validate() + { + if (!OrderId.IsGuid()) throw new ValidationException("OrderId must be a GUID"); + if (!ProductId.IsGuid()) throw new ValidationException("ProductId must be a GUID"); + if (Quantity <= 0) throw new ValidationException("Quantity must be positive"); + if (Price < 0) throw new ValidationException("Price cannot be negative"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs new file mode 100644 index 0000000..b0c120a --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs @@ -0,0 +1,31 @@ +using CandyHouseBase.Exceptions; +using CandyHouseBase.Infrastructure; +using CandyHouseBase.Extensions; + +namespace CandyHouseBase.DataModels +{ + public class PekarDataModel : IValidation + { + public string Id { get; private set; } + public string FIO { get; private set; } + public string Position { get; private set; } + public decimal BonusCoefficient { get; private set; } + + public PekarDataModel(string id, string fio, string position, decimal bonusCoefficient) + { + Id = id; + FIO = fio; + Position = position; + BonusCoefficient = bonusCoefficient; + } + + public void Validate() + { + if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (FIO.IsEmpty()) throw new ValidationException("Field FIO is empty"); + if (Position.IsEmpty()) throw new ValidationException("Field Position is empty"); + if (BonusCoefficient <= 0) throw new ValidationException("BonusCoefficient must be positive"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs new file mode 100644 index 0000000..f5b801b --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs @@ -0,0 +1,27 @@ +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class ProductDataModel : IValidation + { + public string Id { get; private set; } + public string Name { get; private set; } + public string Description { get; private set; } + + public ProductDataModel(string id, string name, string description) + { + Id = id; + Name = name; + Description = description; + } + + public void Validate() + { + if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (Name.IsEmpty()) throw new ValidationException("Field Name is empty"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs new file mode 100644 index 0000000..2727483 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs @@ -0,0 +1,37 @@ +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class ProductStockDataModel : IValidation + { + public string ProductId { get; private set; } + public int Quantity { get; private set; } + + public ProductStockDataModel(string productId, int quantity) + { + ProductId = productId; + Quantity = quantity; + } + + public void Validate() + { + if (!ProductId.IsGuid()) throw new ValidationException("ProductId must be a GUID"); + if (Quantity < 0) throw new ValidationException("Quantity cannot be negative"); + } + + public void AddStock(int amount) + { + if (amount <= 0) throw new ValidationException("Added quantity must be positive"); + Quantity += amount; + } + + public void RemoveStock(int amount) + { + if (amount <= 0) throw new ValidationException("Removed quantity must be positive"); + if (amount > Quantity) throw new ValidationException("Not enough stock available"); + Quantity -= amount; + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs new file mode 100644 index 0000000..733c68c --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs @@ -0,0 +1,33 @@ +using System; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class ProductionDataModel : IValidation + { + public string Id { get; private set; } + public string PekarId { get; private set; } + public string ProductId { get; private set; } + public DateTime ProductionDate { get; private set; } + public int Quantity { get; private set; } + + public ProductionDataModel(string id, string pekarId, string productId, DateTime productionDate, int quantity) + { + Id = id; + PekarId = pekarId; + ProductId = productId; + ProductionDate = productionDate; + Quantity = quantity; + } + + public void Validate() + { + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (!PekarId.IsGuid()) throw new ValidationException("PekarId must be a GUID"); + if (!ProductId.IsGuid()) throw new ValidationException("ProductId must be a GUID"); + if (Quantity <= 0) throw new ValidationException("Quantity must be positive"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/RecipeDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/RecipeDataModel.cs new file mode 100644 index 0000000..fbe97d2 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/RecipeDataModel.cs @@ -0,0 +1,27 @@ +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class RecipeDataModel : IValidation + { + public string ProductId { get; private set; } + public string IngredientId { get; private set; } + public int Quantity { get; private set; } + + public RecipeDataModel(string productId, string ingredientId, int quantity) + { + ProductId = productId; + IngredientId = ingredientId; + Quantity = quantity; + } + + public void Validate() + { + if (!ProductId.IsGuid()) throw new ValidationException("ProductId must be a GUID"); + if (!IngredientId.IsGuid()) throw new ValidationException("IngredientId must be a GUID"); + if (Quantity <= 0) throw new ValidationException("Quantity must be positive"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs new file mode 100644 index 0000000..32d6e55 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class SupplyDataModel : IValidation + { + public string Id { get; private set; } + public DateTime SupplyDate { get; private set; } + public List SupplyItems { get; private set; } + + public SupplyDataModel(string id, DateTime supplyDate, List supplyItems) + { + Id = id; + SupplyDate = supplyDate; + SupplyItems = supplyItems; + } + + public void Validate() + { + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (SupplyItems == null || SupplyItems.Count == 0) throw new ValidationException("Supply must contain at least one item"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs new file mode 100644 index 0000000..947e478 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs @@ -0,0 +1,30 @@ +using CandyHouseBase.Enums; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class SupplyItemDataModel : IValidation + { + public string SupplyId { get; private set; } + public string ItemId { get; private set; } + public int Quantity { get; private set; } + public ItemType ItemType { get; private set; } // 'ingredient' или 'product' + + public SupplyItemDataModel(string supplyId, string itemId, int quantity, ItemType itemType) + { + SupplyId = supplyId; + ItemId = itemId; + Quantity = quantity; + ItemType = itemType; + } + + public void Validate() + { + if (!SupplyId.IsGuid()) throw new ValidationException("SupplyId must be a GUID"); + if (!ItemId.IsGuid()) throw new ValidationException("ItemId must be a GUID"); + if (Quantity <= 0) throw new ValidationException("Quantity must be positive"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs b/CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs new file mode 100644 index 0000000..6f7eb5e --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs @@ -0,0 +1,8 @@ +namespace CandyHouseBase.Enums +{ + public enum ItemType + { + Ingredient = 1, + Product = 2 + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Exceptions/ValidationException.cs b/CandyHouseSolution/CandyHouseBase/Exceptions/ValidationException.cs new file mode 100644 index 0000000..97af727 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/Exceptions/ValidationException.cs @@ -0,0 +1,9 @@ +using System; + +namespace CandyHouseBase.Exceptions +{ + public class ValidationException : Exception + { + public ValidationException(string message) : base(message) { } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Extensions/StringExtensions.cs b/CandyHouseSolution/CandyHouseBase/Extensions/StringExtensions.cs new file mode 100644 index 0000000..17e6077 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/Extensions/StringExtensions.cs @@ -0,0 +1,10 @@ +using System; + +namespace CandyHouseBase.Extensions +{ + public static class StringExtensions + { + public static bool IsEmpty(this string str) => string.IsNullOrWhiteSpace(str); + public static bool IsGuid(this string str) => Guid.TryParse(str, out _); + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Infrastructure/IValidation.cs b/CandyHouseSolution/CandyHouseBase/Infrastructure/IValidation.cs new file mode 100644 index 0000000..07c21c6 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/Infrastructure/IValidation.cs @@ -0,0 +1,7 @@ +namespace CandyHouseBase.Infrastructure +{ + public interface IValidation + { + void Validate(); + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Program.cs b/CandyHouseSolution/CandyHouseBase/Program.cs new file mode 100644 index 0000000..9fda858 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/Program.cs @@ -0,0 +1,9 @@ +namespace CandyHouseBase +{ + public class Program + { + public static void Main(string[] args) + { + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseSolution.sln b/CandyHouseSolution/CandyHouseSolution.sln new file mode 100644 index 0000000..1cc98dd --- /dev/null +++ b/CandyHouseSolution/CandyHouseSolution.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CandyHouseBase", "CandyHouseBase\CandyHouseBase.csproj", "{5DF70B46-31F7-4D15-8C60-52C0A0A364F0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CandyHouseTests", "CandyHouseTests\CandyHouseTests.csproj", "{396EA8C4-6102-479E-83A2-C83E6B74A14E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5DF70B46-31F7-4D15-8C60-52C0A0A364F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5DF70B46-31F7-4D15-8C60-52C0A0A364F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5DF70B46-31F7-4D15-8C60-52C0A0A364F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5DF70B46-31F7-4D15-8C60-52C0A0A364F0}.Release|Any CPU.Build.0 = Release|Any CPU + {396EA8C4-6102-479E-83A2-C83E6B74A14E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {396EA8C4-6102-479E-83A2-C83E6B74A14E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {396EA8C4-6102-479E-83A2-C83E6B74A14E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {396EA8C4-6102-479E-83A2-C83E6B74A14E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/CandyHouseSolution/CandyHouseTests/App.config b/CandyHouseSolution/CandyHouseTests/App.config new file mode 100644 index 0000000..74b8a4e --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/App.config @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj b/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj new file mode 100644 index 0000000..c47af43 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj @@ -0,0 +1,140 @@ + + + + + + + + + Debug + AnyCPU + {396EA8C4-6102-479E-83A2-C83E6B74A14E} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + CandyHouseTests + CandyHouseTests + v4.7.1 + 512 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Microsoft.ApplicationInsights.2.22.0\lib\net46\Microsoft.ApplicationInsights.dll + + + + ..\packages\Microsoft.Testing.Platform.MSBuild.1.5.3\lib\netstandard2.0\Microsoft.Testing.Extensions.MSBuild.dll + + + ..\packages\Microsoft.Testing.Extensions.Telemetry.1.5.3\lib\netstandard2.0\Microsoft.Testing.Extensions.Telemetry.dll + + + ..\packages\Microsoft.Testing.Extensions.TrxReport.Abstractions.1.5.3\lib\netstandard2.0\Microsoft.Testing.Extensions.TrxReport.Abstractions.dll + + + ..\packages\Microsoft.Testing.Extensions.VSTestBridge.1.5.3\lib\netstandard2.0\Microsoft.Testing.Extensions.VSTestBridge.dll + + + ..\packages\Microsoft.Testing.Platform.1.5.3\lib\netstandard2.0\Microsoft.Testing.Platform.dll + + + ..\packages\Microsoft.TestPlatform.ObjectModel.17.12.0\lib\net462\Microsoft.TestPlatform.CoreUtilities.dll + + + ..\packages\Microsoft.TestPlatform.ObjectModel.17.12.0\lib\net462\Microsoft.TestPlatform.PlatformAbstractions.dll + + + ..\packages\Microsoft.TestPlatform.ObjectModel.17.12.0\lib\net462\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll + + + + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll + + + + + + ..\packages\System.Diagnostics.DiagnosticSource.5.0.0\lib\net46\System.Diagnostics.DiagnosticSource.dll + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard2.0\System.Reflection.Metadata.dll + + + + ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll + + + + + ..\packages\NUnit.3.5.0\lib\net45\nunit.framework.dll + + + + + + + + + + + + + + {5df70b46-31f7-4d15-8c60-52c0a0a364f0} + CandyHouseBase + + + + + + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}. + + + + + + + + + + + + + diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs new file mode 100644 index 0000000..2ade668 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs @@ -0,0 +1,55 @@ +using System; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; +using NUnit.Framework; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class CustomerDataModelTests + { + [Test] + public void Customer_ShouldThrowException_WhenIdIsInvalid() + { + var customerDataModel1 = new CustomerDataModel("", "John Doe", "+79998887766", "john@example.com"); + var customerDataModel2 = + new CustomerDataModel("invalid-guid", "John Doe", "+79998887766", "john@example.com"); + Assert.Throws(customerDataModel1.Validate); + Assert.Throws(customerDataModel2.Validate); + } + + [Test] + public void Customer_ShouldThrowException_WhenFIO_IsEmpty() + { + var customerDataModel1 = + new CustomerDataModel(Guid.NewGuid().ToString(), "", "+79998887766", "john@example.com"); + Assert.Throws(customerDataModel1.Validate); + } + + [Test] + public void Customer_ShouldThrowException_WhenPhone_IsInvalid() + { + var customerDataModel1 = + new CustomerDataModel(Guid.NewGuid().ToString(), "John Doe", "123456", "john@example.com"); + Assert.Throws(customerDataModel1.Validate); + } + + [Test] + public void Customer_ShouldThrowException_WhenEmail_IsInvalid() + { + var customerDataModel1 = + new CustomerDataModel(Guid.NewGuid().ToString(), "John Doe", "+79998887766", "invalid-email"); + Assert.Throws(customerDataModel1.Validate); + } + + [Test] + public void Customer_ShouldCreateSuccessfully_WithValidData() + { + var customer = new CustomerDataModel(Guid.NewGuid().ToString(), "John Doe", "+79998887766", + "john@example.com"); + Assert.That(customer.FIO, Is.EqualTo("John Doe")); + Assert.That(customer.Phone, Is.EqualTo("+79998887766")); + Assert.That(customer.Email, Is.EqualTo("john@example.com")); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs new file mode 100644 index 0000000..d9d36f0 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class OrderDataModelTests + { + [Test] + public void Order_ShouldThrowException_WhenIdIsInvalid() + { + var orderDataModel = new OrderDataModel("", Guid.NewGuid().ToString(), DateTime.UtcNow, + 100, 5, new List(), false); + Assert.Throws(orderDataModel.Validate); + } + + [Test] + public void Order_ShouldThrowException_WhenNoItemsInOrder() + { + var orderDataModel = new OrderDataModel(Guid.NewGuid().ToString(), + Guid.NewGuid().ToString(), DateTime.UtcNow, 100, 5, new List(), false); + Assert.Throws(orderDataModel.Validate); + } + + [Test] + public void Order_ShouldCreateSuccessfully_WithValidData() + { + var order = new OrderDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DateTime.UtcNow, 200, + 10, new List + { + new OrderItemDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 2, 50) + }, false); + + Assert.That(order.TotalAmount, Is.EqualTo(200)); + Assert.That(order.DiscountAmount, Is.EqualTo(10)); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs new file mode 100644 index 0000000..6de0581 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs @@ -0,0 +1,40 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class ProductStockDataModelTests + { + [Test] + public void ProductStock_ShouldThrowException_WhenIdIsInvalid() + { + var productStockDataModel = new ProductStockDataModel("", 10); + Assert.Throws(productStockDataModel.Validate); + } + + [Test] + public void ProductStock_ShouldThrowException_WhenQuantityIsNegative() + { + var productStockDataModel = new ProductStockDataModel(Guid.NewGuid().ToString(), -5); + Assert.Throws(productStockDataModel.Validate); + } + + [Test] + public void ProductStock_ShouldAddStockCorrectly() + { + var stock = new ProductStockDataModel(Guid.NewGuid().ToString(), 10); + stock.AddStock(5); + Assert.That(stock.Quantity, Is.EqualTo(15)); + } + + [Test] + public void ProductStock_ShouldThrowException_WhenRemovingTooMuchStock() + { + var stock = new ProductStockDataModel(Guid.NewGuid().ToString(), 10); + Assert.Throws(() => stock.RemoveStock(15)); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/packages.config b/CandyHouseSolution/CandyHouseTests/packages.config new file mode 100644 index 0000000..f1136e5 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/packages.config @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- 2.25.1 From 9ce5690584164dd11aefabfbb4e77aac4ddfa3e0 Mon Sep 17 00:00:00 2001 From: LivelyPuer Date: Wed, 12 Feb 2025 22:24:57 +0400 Subject: [PATCH 2/5] add new tests --- .../CandyHouseTests/CandyHouseTests.csproj | 2 + .../IngredientStockDataModelTests.cs | 40 +++++++++++++++++ .../SupplyItemDataModelTests.cs | 43 +++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs diff --git a/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj b/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj index c47af43..12447e8 100644 --- a/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj +++ b/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj @@ -102,8 +102,10 @@ + + diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs new file mode 100644 index 0000000..2012b3b --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs @@ -0,0 +1,40 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class IngredientStockDataModelTests + { + [Test] + public void IngredientStock_ShouldThrowException_WhenIdIsInvalid() + { + var stock = new IngredientStockDataModel("", 10); + Assert.Throws(stock.Validate); + } + + [Test] + public void IngredientStock_ShouldThrowException_WhenQuantityIsNegative() + { + var stock = new IngredientStockDataModel(Guid.NewGuid().ToString(), -5); + Assert.Throws(stock.Validate); + } + + [Test] + public void IngredientStock_ShouldAddStockCorrectly() + { + var stock = new IngredientStockDataModel(Guid.NewGuid().ToString(), 10); + stock.AddStock(5); + Assert.That(stock.Quantity, Is.EqualTo(15)); + } + + [Test] + public void IngredientStock_ShouldThrowException_WhenRemovingTooMuchStock() + { + var stock = new IngredientStockDataModel(Guid.NewGuid().ToString(), 10); + Assert.Throws(() => stock.RemoveStock(15)); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs new file mode 100644 index 0000000..53a843c --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs @@ -0,0 +1,43 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Enums; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class SupplyItemDataModelTests + { + [Test] + public void SupplyItem_ShouldThrowException_WhenSupplyIdIsInvalid() + { + var supplyItem = new SupplyItemDataModel("", Guid.NewGuid().ToString(), 10, ItemType.Ingredient); + Assert.Throws(supplyItem.Validate); + } + + [Test] + public void SupplyItem_ShouldThrowException_WhenItemIdIsInvalid() + { + var supplyItem = new SupplyItemDataModel(Guid.NewGuid().ToString(), "", 10, ItemType.Product); + Assert.Throws(supplyItem.Validate); + } + + [Test] + public void SupplyItem_ShouldThrowException_WhenQuantityIsZeroOrNegative() + { + var supplyItem = new SupplyItemDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 0, + ItemType.Product); + Assert.Throws(supplyItem.Validate); + } + + [Test] + public void SupplyItem_ShouldCreateSuccessfully_WithValidData() + { + var supplyItem = new SupplyItemDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, + ItemType.Ingredient); + Assert.That(supplyItem.Quantity, Is.EqualTo(10)); + Assert.That(supplyItem.ItemType, Is.EqualTo(ItemType.Ingredient)); + } + } +} \ No newline at end of file -- 2.25.1 From 7be921eb292ac1b8597fdb1913df6b184ea2071a Mon Sep 17 00:00:00 2001 From: LivelyPuer Date: Thu, 13 Feb 2025 16:13:21 +0400 Subject: [PATCH 3/5] init --- .../CandyHouseBase/CandyHouseBase.csproj | 13 +-- .../DataModels/CustomerDataModel.cs | 36 ------- .../DataModels/IngredientStockDataModel.cs | 37 ------- .../DataModels/OrderDataModel.cs | 32 +++--- .../DataModels/OrderItemDataModel.cs | 30 ------ .../DataModels/PekarDataModel.cs | 1 + .../DataModels/PekarHistoryDataModel.cs | 35 +++++++ .../DataModels/PositionDataModel.cs | 30 ++++++ .../DataModels/ProductDataModel.cs | 30 +++++- .../DataModels/ProductStockDataModel.cs | 37 ------- .../DataModels/ProductionDataModel.cs | 33 ------- .../DataModels/SalaryDataModel.cs | 41 ++++++++ .../DataModels/SupplyDataModel.cs | 28 ------ .../DataModels/SupplyItemDataModel.cs | 30 ------ .../CandyHouseBase/Enums/ItemType.cs | 8 -- .../CandyHouseBase/Enums/PositionType.cs | 10 ++ .../CandyHouseBase/Enums/StatusType.cs | 10 ++ .../CandyHouseTests/CandyHouseTests.csproj | 11 ++- .../DataModelsTests/CustomerDataModelTests.cs | 55 ----------- .../IngredientDataModelTests.cs | 59 +++++++++++ .../IngredientStockDataModelTests.cs | 40 -------- .../DataModelsTests/OrderDataModelTests.cs | 97 +++++++++++++++---- .../DataModelsTests/PekarDataModelTests.cs | 57 +++++++++++ .../PekarHistoryModelDataTests.cs | 28 ++++++ .../DataModelsTests/PositionDataModelTests.cs | 48 +++++++++ .../DataModelsTests/ProductDataModelTests.cs | 58 +++++++++++ .../ProductStockDataModelTests.cs | 40 -------- .../DataModelsTests/RecipeDataModelTests.cs | 58 +++++++++++ .../DataModelsTests/SalaryDataModelTests.cs | 61 ++++++++++++ .../SupplyItemDataModelTests.cs | 43 -------- 30 files changed, 631 insertions(+), 465 deletions(-) delete mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs delete mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs delete mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/PekarHistoryDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/PositionDataModel.cs delete mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs delete mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs create mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/SalaryDataModel.cs delete mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs delete mode 100644 CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs delete mode 100644 CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs create mode 100644 CandyHouseSolution/CandyHouseBase/Enums/PositionType.cs create mode 100644 CandyHouseSolution/CandyHouseBase/Enums/StatusType.cs delete mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientDataModelTests.cs delete mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarHistoryModelDataTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/PositionDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs delete mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/RecipeDataModelTests.cs create mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/SalaryDataModelTests.cs delete mode 100644 CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs diff --git a/CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj b/CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj index a470328..1a8ba7a 100644 --- a/CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj +++ b/CandyHouseSolution/CandyHouseBase/CandyHouseBase.csproj @@ -40,19 +40,16 @@ - - - + + - - - - - + + + diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs deleted file mode 100644 index bd167e7..0000000 --- a/CandyHouseSolution/CandyHouseBase/DataModels/CustomerDataModel.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Text.RegularExpressions; -using CandyHouseBase.Exceptions; -using CandyHouseBase.Extensions; -using CandyHouseBase.Infrastructure; - -namespace CandyHouseBase.DataModels -{ - public class CustomerDataModel : IValidation - { - public string Id { get; private set; } - public string FIO { get; private set; } - public string Phone { get; private set; } - public string Email { get; private set; } - - public CustomerDataModel(string id, string fio, string phone, string email) - { - Id = id; - FIO = fio; - Phone = phone; - Email = email; - } - - public void Validate() - { - if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); - if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); - if (FIO.IsEmpty()) throw new ValidationException("Field FIO is empty"); - if (Phone.IsEmpty()) throw new ValidationException("Field Phone is empty"); - - var phoneRegex = new Regex(@"^\+7\d{10}$"); - if (!phoneRegex.IsMatch(Phone)) throw new ValidationException("Invalid phone format"); - - if (Email.IsEmpty() || !Email.Contains("@")) throw new ValidationException("Invalid email format"); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs deleted file mode 100644 index b869940..0000000 --- a/CandyHouseSolution/CandyHouseBase/DataModels/IngredientStockDataModel.cs +++ /dev/null @@ -1,37 +0,0 @@ -using CandyHouseBase.Exceptions; -using CandyHouseBase.Extensions; -using CandyHouseBase.Infrastructure; - -namespace CandyHouseBase.DataModels -{ - public class IngredientStockDataModel : IValidation - { - public string IngredientId { get; private set; } - public int Quantity { get; private set; } - - public IngredientStockDataModel(string ingredientId, int quantity) - { - IngredientId = ingredientId; - Quantity = quantity; - } - - public void Validate() - { - if (!IngredientId.IsGuid()) throw new ValidationException("IngredientId must be a GUID"); - if (Quantity < 0) throw new ValidationException("Quantity cannot be negative"); - } - - public void AddStock(int amount) - { - if (amount <= 0) throw new ValidationException("Added quantity must be positive"); - Quantity += amount; - } - - public void RemoveStock(int amount) - { - if (amount <= 0) throw new ValidationException("Removed quantity must be positive"); - if (amount > Quantity) throw new ValidationException("Not enough stock available"); - Quantity -= amount; - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs index 86f2a9f..cb7b168 100644 --- a/CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs +++ b/CandyHouseSolution/CandyHouseBase/DataModels/OrderDataModel.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using CandyHouseBase.Enums; using CandyHouseBase.Exceptions; using CandyHouseBase.Extensions; using CandyHouseBase.Infrastructure; @@ -9,40 +10,37 @@ namespace CandyHouseBase.DataModels public class OrderDataModel : IValidation { public string Id { get; private set; } - public string CustomerId { get; private set; } // Может быть null, если клиент разовый + public string CustomerName { get; private set; } // Может быть null, если клиент разовый public DateTime OrderDate { get; private set; } public decimal TotalAmount { get; private set; } public decimal DiscountAmount { get; private set; } - public List OrderItems { get; private set; } - public bool IsCompleted { get; private set; } + public string OrderId { get; private set; } + public string PekarId { get; private set; } + public StatusType StatusType { get; private set; } - public OrderDataModel(string id, string customerId, DateTime orderDate, decimal totalAmount, - decimal discountAmount, List orderItems, bool isCompleted) + public OrderDataModel(string id, string customerName, DateTime orderDate, decimal totalAmount, + decimal discountAmount, string orderId, string pekarId, StatusType statusType) { Id = id; - CustomerId = customerId; + CustomerName = customerName; OrderDate = orderDate; TotalAmount = totalAmount; DiscountAmount = discountAmount; - OrderItems = orderItems; - IsCompleted = isCompleted; + OrderId = orderId; + PekarId = pekarId; + StatusType = statusType; } public void Validate() { if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); - if (!CustomerId.IsEmpty() && !CustomerId.IsGuid()) - throw new ValidationException("CustomerId must be a GUID or empty"); - if (OrderItems == null || OrderItems.Count == 0) - throw new ValidationException("Order must contain at least one product"); + if (CustomerName.IsEmpty()) + throw new ValidationException("CustomerName is empty"); if (TotalAmount < 0) throw new ValidationException("TotalAmount cannot be negative"); if (DiscountAmount < 0) throw new ValidationException("DiscountAmount cannot be negative"); - } - - public void MarkAsCompleted() - { - IsCompleted = true; + if (OrderId.IsEmpty()) throw new ValidationException("Field OrderId is empty"); + if (!OrderId.IsGuid()) throw new ValidationException("OrderId must be a GUID"); } } } \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs deleted file mode 100644 index d55d7be..0000000 --- a/CandyHouseSolution/CandyHouseBase/DataModels/OrderItemDataModel.cs +++ /dev/null @@ -1,30 +0,0 @@ -using CandyHouseBase.Exceptions; -using CandyHouseBase.Extensions; -using CandyHouseBase.Infrastructure; - -namespace CandyHouseBase.DataModels -{ - public class OrderItemDataModel : IValidation - { - public string OrderId { get; private set; } - public string ProductId { get; private set; } - public int Quantity { get; private set; } - public decimal Price { get; private set; } // Цена на момент заказа - - public OrderItemDataModel(string orderId, string productId, int quantity, decimal price) - { - OrderId = orderId; - ProductId = productId; - Quantity = quantity; - Price = price; - } - - public void Validate() - { - if (!OrderId.IsGuid()) throw new ValidationException("OrderId must be a GUID"); - if (!ProductId.IsGuid()) throw new ValidationException("ProductId must be a GUID"); - if (Quantity <= 0) throw new ValidationException("Quantity must be positive"); - if (Price < 0) throw new ValidationException("Price cannot be negative"); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs index b0c120a..84a0747 100644 --- a/CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs +++ b/CandyHouseSolution/CandyHouseBase/DataModels/PekarDataModel.cs @@ -25,6 +25,7 @@ namespace CandyHouseBase.DataModels if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); if (FIO.IsEmpty()) throw new ValidationException("Field FIO is empty"); if (Position.IsEmpty()) throw new ValidationException("Field Position is empty"); + if (!Position.IsGuid()) throw new ValidationException("Field must be a GUID"); if (BonusCoefficient <= 0) throw new ValidationException("BonusCoefficient must be positive"); } } diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/PekarHistoryDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/PekarHistoryDataModel.cs new file mode 100644 index 0000000..d49aa6c --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/PekarHistoryDataModel.cs @@ -0,0 +1,35 @@ +using System; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Infrastructure; +using CandyHouseBase.Extensions; + +namespace CandyHouseBase.DataModels +{ + public class PekarHistoryDataModel : IValidation + { + public string PekarId { get; private set; } + public string FIO { get; private set; } + public string PositionId { get; private set; } + public DateTime Date { get; private set; } + public decimal BonusCoefficient { get; private set; } + + public PekarHistoryDataModel(string peKarId, string fio, string positionId, decimal bonusCoefficient, DateTime dateTime) + { + PekarId = peKarId; + FIO = fio; + PositionId = positionId; + BonusCoefficient = bonusCoefficient; + Date = dateTime; + } + + public void Validate() + { + if (PekarId.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!PekarId.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (FIO.IsEmpty()) throw new ValidationException("Field FIO is empty"); + if (PositionId.IsEmpty()) throw new ValidationException("Field Position is empty"); + if (!PositionId.IsGuid()) throw new ValidationException("Field must be a GUID"); + if (BonusCoefficient <= 0) throw new ValidationException("BonusCoefficient must be positive"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/PositionDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/PositionDataModel.cs new file mode 100644 index 0000000..896f603 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/PositionDataModel.cs @@ -0,0 +1,30 @@ +using System; +using CandyHouseBase.Enums; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class PositionDataModel : IValidation + { + public string Id { get; set; } + public PositionType Type { get; set; } + public string Title { get; set; } + + public PositionDataModel(string id, PositionType type, string title) + { + Id = id; + Type = type; + Title = title; + } + + public void Validate() + { + if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (string.IsNullOrEmpty(Title)) throw new ValidationException("Field Title is empty"); + if (!Enum.IsDefined(typeof(PositionType), Type)) throw new ValidationException("Invalid PositionType"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs index f5b801b..2f1d37f 100644 --- a/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs +++ b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs @@ -7,8 +7,33 @@ namespace CandyHouseBase.DataModels public class ProductDataModel : IValidation { public string Id { get; private set; } - public string Name { get; private set; } - public string Description { get; private set; } + + public string Name + { + get => name; + private set + { + if (!name.IsEmpty()) OldName = name; + name = value.Trim(); + } + } + + public string Description + { + get => description; + private set + { + if (!description.IsEmpty()) OldDescription = description; + description = value.Trim(); + } + } + + public string OldName { get; private set; } + + public string OldDescription { get; private set; } + + private string name; + private string description; public ProductDataModel(string id, string name, string description) { @@ -22,6 +47,7 @@ namespace CandyHouseBase.DataModels if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); if (Name.IsEmpty()) throw new ValidationException("Field Name is empty"); + if (Description.IsEmpty()) throw new ValidationException("Field Description is empty"); } } } \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs deleted file mode 100644 index 2727483..0000000 --- a/CandyHouseSolution/CandyHouseBase/DataModels/ProductStockDataModel.cs +++ /dev/null @@ -1,37 +0,0 @@ -using CandyHouseBase.Exceptions; -using CandyHouseBase.Extensions; -using CandyHouseBase.Infrastructure; - -namespace CandyHouseBase.DataModels -{ - public class ProductStockDataModel : IValidation - { - public string ProductId { get; private set; } - public int Quantity { get; private set; } - - public ProductStockDataModel(string productId, int quantity) - { - ProductId = productId; - Quantity = quantity; - } - - public void Validate() - { - if (!ProductId.IsGuid()) throw new ValidationException("ProductId must be a GUID"); - if (Quantity < 0) throw new ValidationException("Quantity cannot be negative"); - } - - public void AddStock(int amount) - { - if (amount <= 0) throw new ValidationException("Added quantity must be positive"); - Quantity += amount; - } - - public void RemoveStock(int amount) - { - if (amount <= 0) throw new ValidationException("Removed quantity must be positive"); - if (amount > Quantity) throw new ValidationException("Not enough stock available"); - Quantity -= amount; - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs deleted file mode 100644 index 733c68c..0000000 --- a/CandyHouseSolution/CandyHouseBase/DataModels/ProductionDataModel.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using CandyHouseBase.Exceptions; -using CandyHouseBase.Extensions; -using CandyHouseBase.Infrastructure; - -namespace CandyHouseBase.DataModels -{ - public class ProductionDataModel : IValidation - { - public string Id { get; private set; } - public string PekarId { get; private set; } - public string ProductId { get; private set; } - public DateTime ProductionDate { get; private set; } - public int Quantity { get; private set; } - - public ProductionDataModel(string id, string pekarId, string productId, DateTime productionDate, int quantity) - { - Id = id; - PekarId = pekarId; - ProductId = productId; - ProductionDate = productionDate; - Quantity = quantity; - } - - public void Validate() - { - if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); - if (!PekarId.IsGuid()) throw new ValidationException("PekarId must be a GUID"); - if (!ProductId.IsGuid()) throw new ValidationException("ProductId must be a GUID"); - if (Quantity <= 0) throw new ValidationException("Quantity must be positive"); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/SalaryDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/SalaryDataModel.cs new file mode 100644 index 0000000..c15b2b6 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/DataModels/SalaryDataModel.cs @@ -0,0 +1,41 @@ +using System; +using CandyHouseBase.Exceptions; +using CandyHouseBase.Extensions; +using CandyHouseBase.Infrastructure; + +namespace CandyHouseBase.DataModels +{ + public class SalaryDataModel : IValidation + { + public string Id { get; private set; } + public string PekarId { get; private set; } + public DateTime Period { get; private set; } + public decimal BaseRate { get; private set; } + public decimal BonusRate { get; private set; } + public int TotalQuantity { get; private set; } + public decimal TotalSalary { get; private set; } + + public SalaryDataModel(string id, string pekarId, DateTime period, decimal baseRate, decimal bonusRate, int totalQuantity, decimal totalSalary) + { + Id = id; + PekarId = pekarId; + Period = period; + BaseRate = baseRate; + BonusRate = bonusRate; + TotalQuantity = totalQuantity; + TotalSalary = totalSalary; + } + + public void Validate() + { + if (Id.IsEmpty()) throw new ValidationException("Field Id is empty"); + if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); + if (PekarId.IsEmpty()) throw new ValidationException("Field PekarId is empty"); + if (!PekarId.IsGuid()) throw new ValidationException("PekarId must be a GUID"); + if (BaseRate < 0) throw new ValidationException("BaseRate cannot be negative"); + if (BonusRate < 0) throw new ValidationException("BonusRate cannot be negative"); + if (TotalQuantity < 0) throw new ValidationException("TotalQuantity cannot be negative"); + if (TotalSalary < 0) throw new ValidationException("TotalSalary cannot be negative"); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs deleted file mode 100644 index 32d6e55..0000000 --- a/CandyHouseSolution/CandyHouseBase/DataModels/SupplyDataModel.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using CandyHouseBase.Exceptions; -using CandyHouseBase.Extensions; -using CandyHouseBase.Infrastructure; - -namespace CandyHouseBase.DataModels -{ - public class SupplyDataModel : IValidation - { - public string Id { get; private set; } - public DateTime SupplyDate { get; private set; } - public List SupplyItems { get; private set; } - - public SupplyDataModel(string id, DateTime supplyDate, List supplyItems) - { - Id = id; - SupplyDate = supplyDate; - SupplyItems = supplyItems; - } - - public void Validate() - { - if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); - if (SupplyItems == null || SupplyItems.Count == 0) throw new ValidationException("Supply must contain at least one item"); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs deleted file mode 100644 index 947e478..0000000 --- a/CandyHouseSolution/CandyHouseBase/DataModels/SupplyItemDataModel.cs +++ /dev/null @@ -1,30 +0,0 @@ -using CandyHouseBase.Enums; -using CandyHouseBase.Exceptions; -using CandyHouseBase.Extensions; -using CandyHouseBase.Infrastructure; - -namespace CandyHouseBase.DataModels -{ - public class SupplyItemDataModel : IValidation - { - public string SupplyId { get; private set; } - public string ItemId { get; private set; } - public int Quantity { get; private set; } - public ItemType ItemType { get; private set; } // 'ingredient' или 'product' - - public SupplyItemDataModel(string supplyId, string itemId, int quantity, ItemType itemType) - { - SupplyId = supplyId; - ItemId = itemId; - Quantity = quantity; - ItemType = itemType; - } - - public void Validate() - { - if (!SupplyId.IsGuid()) throw new ValidationException("SupplyId must be a GUID"); - if (!ItemId.IsGuid()) throw new ValidationException("ItemId must be a GUID"); - if (Quantity <= 0) throw new ValidationException("Quantity must be positive"); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs b/CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs deleted file mode 100644 index 6f7eb5e..0000000 --- a/CandyHouseSolution/CandyHouseBase/Enums/ItemType.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace CandyHouseBase.Enums -{ - public enum ItemType - { - Ingredient = 1, - Product = 2 - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Enums/PositionType.cs b/CandyHouseSolution/CandyHouseBase/Enums/PositionType.cs new file mode 100644 index 0000000..8313553 --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/Enums/PositionType.cs @@ -0,0 +1,10 @@ +namespace CandyHouseBase.Enums +{ + public enum PositionType + { + None = 1, + Small = 2, + Medium = 3, + Cool = 4, + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseBase/Enums/StatusType.cs b/CandyHouseSolution/CandyHouseBase/Enums/StatusType.cs new file mode 100644 index 0000000..57a81fa --- /dev/null +++ b/CandyHouseSolution/CandyHouseBase/Enums/StatusType.cs @@ -0,0 +1,10 @@ +namespace CandyHouseBase.Enums +{ + public enum StatusType + { + Pending, + Completed, + Cancelled, + InProgress + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj b/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj index 12447e8..760ff16 100644 --- a/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj +++ b/CandyHouseSolution/CandyHouseTests/CandyHouseTests.csproj @@ -101,11 +101,14 @@ - - + - - + + + + + + diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs deleted file mode 100644 index 2ade668..0000000 --- a/CandyHouseSolution/CandyHouseTests/DataModelsTests/CustomerDataModelTests.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using CandyHouseBase.DataModels; -using CandyHouseBase.Exceptions; -using NUnit.Framework; - -namespace CandyHouseTests.DataModelsTests -{ - [TestFixture] - public class CustomerDataModelTests - { - [Test] - public void Customer_ShouldThrowException_WhenIdIsInvalid() - { - var customerDataModel1 = new CustomerDataModel("", "John Doe", "+79998887766", "john@example.com"); - var customerDataModel2 = - new CustomerDataModel("invalid-guid", "John Doe", "+79998887766", "john@example.com"); - Assert.Throws(customerDataModel1.Validate); - Assert.Throws(customerDataModel2.Validate); - } - - [Test] - public void Customer_ShouldThrowException_WhenFIO_IsEmpty() - { - var customerDataModel1 = - new CustomerDataModel(Guid.NewGuid().ToString(), "", "+79998887766", "john@example.com"); - Assert.Throws(customerDataModel1.Validate); - } - - [Test] - public void Customer_ShouldThrowException_WhenPhone_IsInvalid() - { - var customerDataModel1 = - new CustomerDataModel(Guid.NewGuid().ToString(), "John Doe", "123456", "john@example.com"); - Assert.Throws(customerDataModel1.Validate); - } - - [Test] - public void Customer_ShouldThrowException_WhenEmail_IsInvalid() - { - var customerDataModel1 = - new CustomerDataModel(Guid.NewGuid().ToString(), "John Doe", "+79998887766", "invalid-email"); - Assert.Throws(customerDataModel1.Validate); - } - - [Test] - public void Customer_ShouldCreateSuccessfully_WithValidData() - { - var customer = new CustomerDataModel(Guid.NewGuid().ToString(), "John Doe", "+79998887766", - "john@example.com"); - Assert.That(customer.FIO, Is.EqualTo("John Doe")); - Assert.That(customer.Phone, Is.EqualTo("+79998887766")); - Assert.That(customer.Email, Is.EqualTo("john@example.com")); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientDataModelTests.cs new file mode 100644 index 0000000..ad01684 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientDataModelTests.cs @@ -0,0 +1,59 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class IngredientDataModelTests + { + [Test] + public void CreateIngredientDataModel_ValidData_ShouldCreateSuccessfully() + { + var id = Guid.NewGuid().ToString(); + var name = "Sugar"; + var unit = "kg"; + var cost = 10.5m; + + var ingredient = new IngredientDataModel(id, name, unit, cost); + + Assert.AreEqual(id, ingredient.Id); + Assert.AreEqual(name, ingredient.Name); + Assert.AreEqual(unit, ingredient.Unit); + Assert.AreEqual(cost, ingredient.Cost); + } + + [Test] + public void Validate_ValidData_ShouldNotThrowException() + { + var ingredient = new IngredientDataModel(Guid.NewGuid().ToString(), "Sugar", "kg", 10); + + Assert.DoesNotThrow(() => ingredient.Validate()); + } + + [Test] + public void Validate_InvalidId_ShouldThrowValidationException() + { + var ingredient = new IngredientDataModel("", "Sugar", "kg", 10); + + Assert.Throws(() => ingredient.Validate()); + } + + [Test] + public void Validate_InvalidName_ShouldThrowValidationException() + { + var ingredient = new IngredientDataModel(Guid.NewGuid().ToString(), "", "kg", 10); + + Assert.Throws(() => ingredient.Validate()); + } + + [Test] + public void Validate_NegativeQuantity_ShouldThrowValidationException() + { + var ingredient = new IngredientDataModel(Guid.NewGuid().ToString(), "Sugar", "kg", -5); + + Assert.Throws(() => ingredient.Validate()); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs deleted file mode 100644 index 2012b3b..0000000 --- a/CandyHouseSolution/CandyHouseTests/DataModelsTests/IngredientStockDataModelTests.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using NUnit.Framework; -using CandyHouseBase.DataModels; -using CandyHouseBase.Exceptions; - -namespace CandyHouseTests.DataModelsTests -{ - [TestFixture] - public class IngredientStockDataModelTests - { - [Test] - public void IngredientStock_ShouldThrowException_WhenIdIsInvalid() - { - var stock = new IngredientStockDataModel("", 10); - Assert.Throws(stock.Validate); - } - - [Test] - public void IngredientStock_ShouldThrowException_WhenQuantityIsNegative() - { - var stock = new IngredientStockDataModel(Guid.NewGuid().ToString(), -5); - Assert.Throws(stock.Validate); - } - - [Test] - public void IngredientStock_ShouldAddStockCorrectly() - { - var stock = new IngredientStockDataModel(Guid.NewGuid().ToString(), 10); - stock.AddStock(5); - Assert.That(stock.Quantity, Is.EqualTo(15)); - } - - [Test] - public void IngredientStock_ShouldThrowException_WhenRemovingTooMuchStock() - { - var stock = new IngredientStockDataModel(Guid.NewGuid().ToString(), 10); - Assert.Throws(() => stock.RemoveStock(15)); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs index d9d36f0..2e4a46a 100644 --- a/CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/OrderDataModelTests.cs @@ -1,7 +1,7 @@ using System; -using System.Collections.Generic; using NUnit.Framework; using CandyHouseBase.DataModels; +using CandyHouseBase.Enums; using CandyHouseBase.Exceptions; namespace CandyHouseTests.DataModelsTests @@ -10,32 +10,95 @@ namespace CandyHouseTests.DataModelsTests public class OrderDataModelTests { [Test] - public void Order_ShouldThrowException_WhenIdIsInvalid() + public void CreateOrderDataModel_ValidData_ShouldCreateSuccessfully() { - var orderDataModel = new OrderDataModel("", Guid.NewGuid().ToString(), DateTime.UtcNow, - 100, 5, new List(), false); - Assert.Throws(orderDataModel.Validate); + var id = Guid.NewGuid().ToString(); + var customerName = "Alice"; + var orderDate = DateTime.Now; + var totalAmount = 100.0m; + var discountAmount = 10.0m; + var orderId = Guid.NewGuid().ToString(); + var pekarId = Guid.NewGuid().ToString(); + var statusType = StatusType.Pending; + + var order = new OrderDataModel(id, customerName, orderDate, totalAmount, discountAmount, orderId, pekarId, statusType); + + Assert.AreEqual(id, order.Id); + Assert.AreEqual(customerName, order.CustomerName); + Assert.AreEqual(orderDate, order.OrderDate); + Assert.AreEqual(totalAmount, order.TotalAmount); + Assert.AreEqual(discountAmount, order.DiscountAmount); + Assert.AreEqual(orderId, order.OrderId); + Assert.AreEqual(pekarId, order.PekarId); + Assert.AreEqual(statusType, order.StatusType); } [Test] - public void Order_ShouldThrowException_WhenNoItemsInOrder() + public void Validate_ValidData_ShouldNotThrowException() { - var orderDataModel = new OrderDataModel(Guid.NewGuid().ToString(), - Guid.NewGuid().ToString(), DateTime.UtcNow, 100, 5, new List(), false); - Assert.Throws(orderDataModel.Validate); + var order = new OrderDataModel( + Guid.NewGuid().ToString(), + "Alice", + DateTime.Now, + 100.0m, + 10.0m, + Guid.NewGuid().ToString(), + Guid.NewGuid().ToString(), + StatusType.Pending + ); + + Assert.DoesNotThrow(() => order.Validate()); } [Test] - public void Order_ShouldCreateSuccessfully_WithValidData() + public void Validate_InvalidId_ShouldThrowValidationException() { - var order = new OrderDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DateTime.UtcNow, 200, - 10, new List - { - new OrderItemDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 2, 50) - }, false); + var order = new OrderDataModel( + "", + "Alice", + DateTime.Now, + 100.0m, + 10.0m, + Guid.NewGuid().ToString(), + Guid.NewGuid().ToString(), + StatusType.Pending + ); - Assert.That(order.TotalAmount, Is.EqualTo(200)); - Assert.That(order.DiscountAmount, Is.EqualTo(10)); + Assert.Throws(() => order.Validate()); + } + + [Test] + public void Validate_InvalidCustomerName_ShouldThrowValidationException() + { + var order = new OrderDataModel( + Guid.NewGuid().ToString(), + "", + DateTime.Now, + 100.0m, + 10.0m, + Guid.NewGuid().ToString(), + Guid.NewGuid().ToString(), + StatusType.Pending + ); + + Assert.Throws(() => order.Validate()); + } + + [Test] + public void Validate_NegativeTotalAmount_ShouldThrowValidationException() + { + var order = new OrderDataModel( + Guid.NewGuid().ToString(), + "Alice", + DateTime.Now, + -50.0m, + 10.0m, + Guid.NewGuid().ToString(), + Guid.NewGuid().ToString(), + StatusType.Pending + ); + + Assert.Throws(() => order.Validate()); } } } \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarDataModelTests.cs new file mode 100644 index 0000000..d3bd2d3 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarDataModelTests.cs @@ -0,0 +1,57 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class PekarDataModelTests + { + [Test] + public void CreatePekarDataModel_ValidData_ShouldCreateSuccessfully() + { + var id = Guid.NewGuid().ToString(); + var name = "John Doe"; + var experience = Guid.NewGuid().ToString(); + + var pekar = new PekarDataModel(id, name, experience, 0); + + Assert.AreEqual(id, pekar.Id); + Assert.AreEqual(name, pekar.FIO); + Assert.AreEqual(experience, pekar.Position); + } + + [Test] + public void Validate_ValidData_ShouldNotThrowException() + { + var pekar = new PekarDataModel(Guid.NewGuid().ToString(), "John Doe", Guid.NewGuid().ToString(), 6); + + Assert.DoesNotThrow(() => pekar.Validate()); + } + + [Test] + public void Validate_InvalidId_ShouldThrowValidationException() + { + var pekar = new PekarDataModel("", "John Doe", Guid.NewGuid().ToString(), 0); + + Assert.Throws(() => pekar.Validate()); + } + + [Test] + public void Validate_InvalidName_ShouldThrowValidationException() + { + var pekar = new PekarDataModel(Guid.NewGuid().ToString(), "", Guid.NewGuid().ToString(), 0); + + Assert.Throws(() => pekar.Validate()); + } + + [Test] + public void Validate_NegativeExperience_ShouldThrowValidationException() + { + var pekar = new PekarDataModel(Guid.NewGuid().ToString(), "John Doe", "some-invalidate", 0); + + Assert.Throws(() => pekar.Validate()); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarHistoryModelDataTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarHistoryModelDataTests.cs new file mode 100644 index 0000000..79c6dfb --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/PekarHistoryModelDataTests.cs @@ -0,0 +1,28 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class PekarHistoryModelDataTests + { + [Test] + public void CreatePekarHistoryDataModel_ValidData_ShouldCreateSuccessfully() + { + var peKarId = Guid.NewGuid().ToString(); + var fio = "John Doe"; + var positionId = Guid.NewGuid().ToString(); + var bonusCoefficient = 1.5m; + var dateTime = DateTime.Now; + + var peKarHistory = new PekarHistoryDataModel(peKarId, fio, positionId, bonusCoefficient, dateTime); + + Assert.AreEqual(peKarId, peKarHistory.PekarId); + Assert.AreEqual(fio, peKarHistory.FIO); + Assert.AreEqual(positionId, peKarHistory.PositionId); + Assert.AreEqual(bonusCoefficient, peKarHistory.BonusCoefficient); + Assert.AreEqual(dateTime, peKarHistory.Date); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/PositionDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/PositionDataModelTests.cs new file mode 100644 index 0000000..1ecc770 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/PositionDataModelTests.cs @@ -0,0 +1,48 @@ +using System; +using CandyHouseBase.DataModels; +using CandyHouseBase.Enums; +using CandyHouseBase.Exceptions; +using NUnit.Framework; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class PositionDataModelTests + { + [Test] + public void CreatePositionDataModel_ValidData_ShouldCreateSuccessfully() + { + var id = Guid.NewGuid().ToString(); + var type = PositionType.Cool; + var title = "Manager"; + + var position = new PositionDataModel(id, type, title); + + Assert.AreEqual(id, position.Id); + Assert.AreEqual(type, position.Type); + Assert.AreEqual(title, position.Title); + } + + [Test] + public void CreatePositionDataModel_InvalidId_ShouldThrowArgumentException() + { + var invalidId = ""; + var type = PositionType.Cool; + var title = "Manager"; + var item = new PositionDataModel(invalidId, type, title); + + Assert.Throws(() => item.Validate()); + } + + [Test] + public void CreatePositionDataModel_InvalidTitle_ShouldThrowArgumentException() + { + var id = Guid.NewGuid().ToString(); + var type = PositionType.Cool; + var invalidTitle = ""; + var item = new PositionDataModel(id, type, invalidTitle); + + Assert.Throws(() => item.Validate()); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs new file mode 100644 index 0000000..2893e09 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs @@ -0,0 +1,58 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class ProductDataModelTests + { + [Test] + public void CreateProductDataModel_ValidData_ShouldCreateSuccessfully() + { + var id = Guid.NewGuid().ToString(); + var name = "Candy"; + var description = "Delicious candy"; + + var product = new ProductDataModel(id, name, description); + + Assert.AreEqual(id, product.Id); + Assert.AreEqual(name, product.Name); + Assert.AreEqual(description, product.Description); + } + + [Test] + public void CreateProductDataModel_InvalidId_ShouldThrowArgumentException() + { + var invalidId = ""; + var name = "Candy"; + var description = "Delicious candy"; + var product = new ProductDataModel(invalidId, name, description); + + Assert.Throws(() => product.Validate()); + } + + [Test] + public void CreateProductDataModel_InvalidName_ShouldThrowArgumentException() + { + var id = Guid.NewGuid().ToString(); + var invalidName = ""; + var description = "Delicious candy"; + var product = new ProductDataModel(id, invalidName, description); + + Assert.Throws(() => product.Validate()); + } + + [Test] + public void CreateProductDataModel_InvalidDescription_ShouldThrowArgumentException() + { + var id = Guid.NewGuid().ToString(); + var name = "Candy"; + var invalidDescription = ""; + var product = new ProductDataModel(id, name, invalidDescription); + + Assert.Throws(() => product.Validate()); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs deleted file mode 100644 index 6de0581..0000000 --- a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductStockDataModelTests.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using NUnit.Framework; -using CandyHouseBase.DataModels; -using CandyHouseBase.Exceptions; - -namespace CandyHouseTests.DataModelsTests -{ - [TestFixture] - public class ProductStockDataModelTests - { - [Test] - public void ProductStock_ShouldThrowException_WhenIdIsInvalid() - { - var productStockDataModel = new ProductStockDataModel("", 10); - Assert.Throws(productStockDataModel.Validate); - } - - [Test] - public void ProductStock_ShouldThrowException_WhenQuantityIsNegative() - { - var productStockDataModel = new ProductStockDataModel(Guid.NewGuid().ToString(), -5); - Assert.Throws(productStockDataModel.Validate); - } - - [Test] - public void ProductStock_ShouldAddStockCorrectly() - { - var stock = new ProductStockDataModel(Guid.NewGuid().ToString(), 10); - stock.AddStock(5); - Assert.That(stock.Quantity, Is.EqualTo(15)); - } - - [Test] - public void ProductStock_ShouldThrowException_WhenRemovingTooMuchStock() - { - var stock = new ProductStockDataModel(Guid.NewGuid().ToString(), 10); - Assert.Throws(() => stock.RemoveStock(15)); - } - } -} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/RecipeDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/RecipeDataModelTests.cs new file mode 100644 index 0000000..d9314d7 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/RecipeDataModelTests.cs @@ -0,0 +1,58 @@ +using System; +using NUnit.Framework; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; + +namespace CandyHouseTests.DataModelsTests +{ + [TestFixture] + public class RecipeDataModelTests + { + [Test] + public void CreateRecipeDataModel_ValidData_ShouldCreateSuccessfully() + { + var productId = Guid.NewGuid().ToString(); + var ingredientId = Guid.NewGuid().ToString(); + var quantity = 5; + + var recipe = new RecipeDataModel(productId, ingredientId, quantity); + + Assert.AreEqual(productId, recipe.ProductId); + Assert.AreEqual(ingredientId, recipe.IngredientId); + Assert.AreEqual(quantity, recipe.Quantity); + } + + [Test] + public void CreateRecipeDataModel_InvalidProductId_ShouldThrowValidationException() + { + var invalidProductId = ""; + var ingredientId = Guid.NewGuid().ToString(); + var quantity = 5; + var recipe = new RecipeDataModel(invalidProductId, ingredientId, quantity); + + Assert.Throws(() => recipe.Validate()); + } + + [Test] + public void CreateRecipeDataModel_InvalidIngredientId_ShouldThrowValidationException() + { + var productId = Guid.NewGuid().ToString(); + var invalidIngredientId = ""; + var quantity = 5; + var recipe = new RecipeDataModel(productId, invalidIngredientId, quantity); + + Assert.Throws(() => recipe.Validate()); + } + + [Test] + public void CreateRecipeDataModel_InvalidQuantity_ShouldThrowValidationException() + { + var productId = Guid.NewGuid().ToString(); + var ingredientId = Guid.NewGuid().ToString(); + var invalidQuantity = -1; + var recipe = new RecipeDataModel(productId, ingredientId, invalidQuantity); + + Assert.Throws(() => recipe.Validate()); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/SalaryDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/SalaryDataModelTests.cs new file mode 100644 index 0000000..98c37f0 --- /dev/null +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/SalaryDataModelTests.cs @@ -0,0 +1,61 @@ +using System; +using CandyHouseBase.DataModels; +using CandyHouseBase.Exceptions; +using NUnit.Framework; + +namespace CandyHouseTests.DataModelsTests +{ + public class SalaryDataModelTests + { + [Test] + public void CreateSalaryDataModel_ValidData_ShouldCreateSuccessfully() + { + var id = Guid.NewGuid().ToString(); + var pekarId = Guid.NewGuid().ToString(); + var period = new DateTime(2023, 10, 1); + var baseRate = 1000m; + var bonusRate = 200m; + var totalQuantity = 50; + var totalSalary = 1200m; + + var salaryData = new SalaryDataModel(id, pekarId, period, baseRate, bonusRate, totalQuantity, totalSalary); + + Assert.AreEqual(id, salaryData.Id); + Assert.AreEqual(pekarId, salaryData.PekarId); + Assert.AreEqual(period, salaryData.Period); + Assert.AreEqual(baseRate, salaryData.BaseRate); + Assert.AreEqual(bonusRate, salaryData.BonusRate); + Assert.AreEqual(totalQuantity, salaryData.TotalQuantity); + Assert.AreEqual(totalSalary, salaryData.TotalSalary); + } + + [Test] + public void CreateSalaryDataModel_InvalidId_ShouldThrowValidationException() + { + var invalidId = ""; + var pekarId = Guid.NewGuid().ToString(); + var period = new DateTime(2023, 10, 1); + var baseRate = 1000m; + var bonusRate = 200m; + var totalQuantity = 50; + var totalSalary = 1200m; + var salary = new SalaryDataModel(invalidId, pekarId, period, baseRate, bonusRate, totalQuantity, + totalSalary); + Assert.Throws(() => salary.Validate());} + + [Test] + public void CreateSalaryDataModel_InvalidBaseRate_ShouldThrowValidationException() + { + var id = Guid.NewGuid().ToString(); + var pekarId = Guid.NewGuid().ToString(); + var period = new DateTime(2023, 10, 1); + var invalidBaseRate = -1000m; + var bonusRate = 200m; + var totalQuantity = 50; + var totalSalary = 1200m; + var salary = new SalaryDataModel(id, pekarId, period, invalidBaseRate, bonusRate, totalQuantity, + totalSalary); + Assert.Throws(() => salary.Validate()); + } + } +} \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs deleted file mode 100644 index 53a843c..0000000 --- a/CandyHouseSolution/CandyHouseTests/DataModelsTests/SupplyItemDataModelTests.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using NUnit.Framework; -using CandyHouseBase.DataModels; -using CandyHouseBase.Enums; -using CandyHouseBase.Exceptions; - -namespace CandyHouseTests.DataModelsTests -{ - [TestFixture] - public class SupplyItemDataModelTests - { - [Test] - public void SupplyItem_ShouldThrowException_WhenSupplyIdIsInvalid() - { - var supplyItem = new SupplyItemDataModel("", Guid.NewGuid().ToString(), 10, ItemType.Ingredient); - Assert.Throws(supplyItem.Validate); - } - - [Test] - public void SupplyItem_ShouldThrowException_WhenItemIdIsInvalid() - { - var supplyItem = new SupplyItemDataModel(Guid.NewGuid().ToString(), "", 10, ItemType.Product); - Assert.Throws(supplyItem.Validate); - } - - [Test] - public void SupplyItem_ShouldThrowException_WhenQuantityIsZeroOrNegative() - { - var supplyItem = new SupplyItemDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 0, - ItemType.Product); - Assert.Throws(supplyItem.Validate); - } - - [Test] - public void SupplyItem_ShouldCreateSuccessfully_WithValidData() - { - var supplyItem = new SupplyItemDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, - ItemType.Ingredient); - Assert.That(supplyItem.Quantity, Is.EqualTo(10)); - Assert.That(supplyItem.ItemType, Is.EqualTo(ItemType.Ingredient)); - } - } -} \ No newline at end of file -- 2.25.1 From 03057e83bde91c3ddc7cc83994041700f272724a Mon Sep 17 00:00:00 2001 From: LivelyPuer Date: Thu, 13 Feb 2025 16:25:09 +0400 Subject: [PATCH 4/5] INIT2 --- .../DataModels/ProductDataModel.cs | 6 +++++- .../DataModelsTests/ProductDataModelTests.cs | 21 ++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs index 2f1d37f..f9c5a67 100644 --- a/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs +++ b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using CandyHouseBase.Exceptions; using CandyHouseBase.Extensions; using CandyHouseBase.Infrastructure; @@ -34,12 +35,15 @@ namespace CandyHouseBase.DataModels private string name; private string description; + + public List IngredientsItems { get; private set; } - public ProductDataModel(string id, string name, string description) + public ProductDataModel(string id, string name, string description, List ingredients) { Id = id; Name = name; Description = description; + IngredientsItems = ingredients; } public void Validate() diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs index 2893e09..ebe3356 100644 --- a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using NUnit.Framework; using CandyHouseBase.DataModels; using CandyHouseBase.Exceptions; @@ -14,12 +15,13 @@ namespace CandyHouseTests.DataModelsTests var id = Guid.NewGuid().ToString(); var name = "Candy"; var description = "Delicious candy"; - - var product = new ProductDataModel(id, name, description); + var ingredients = new List(); + var product = new ProductDataModel(id, name, description, ingredients); Assert.AreEqual(id, product.Id); Assert.AreEqual(name, product.Name); Assert.AreEqual(description, product.Description); + Assert.AreEqual(ingredients, product.IngredientsItems); } [Test] @@ -28,8 +30,9 @@ namespace CandyHouseTests.DataModelsTests var invalidId = ""; var name = "Candy"; var description = "Delicious candy"; - var product = new ProductDataModel(invalidId, name, description); - + var ingredients = new List(); + var product = new ProductDataModel(invalidId, name, description, ingredients); + Assert.Throws(() => product.Validate()); } @@ -39,8 +42,9 @@ namespace CandyHouseTests.DataModelsTests var id = Guid.NewGuid().ToString(); var invalidName = ""; var description = "Delicious candy"; - var product = new ProductDataModel(id, invalidName, description); - + var ingredients = new List(); + var product = new ProductDataModel(id, invalidName, description, ingredients); + Assert.Throws(() => product.Validate()); } @@ -50,8 +54,9 @@ namespace CandyHouseTests.DataModelsTests var id = Guid.NewGuid().ToString(); var name = "Candy"; var invalidDescription = ""; - var product = new ProductDataModel(id, name, invalidDescription); - + var ingredients = new List(); + var product = new ProductDataModel(id, name, invalidDescription, ingredients); + Assert.Throws(() => product.Validate()); } } -- 2.25.1 From 825133bed37c408a7d87208c7c18b0c3c5aa651b Mon Sep 17 00:00:00 2001 From: LivelyPuer Date: Thu, 13 Feb 2025 16:28:13 +0400 Subject: [PATCH 5/5] f 2 --- .../DataModels/ProductDataModel.cs | 1 + .../DataModelsTests/ProductDataModelTests.cs | 22 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs index f9c5a67..6fa71ac 100644 --- a/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs +++ b/CandyHouseSolution/CandyHouseBase/DataModels/ProductDataModel.cs @@ -52,6 +52,7 @@ namespace CandyHouseBase.DataModels if (!Id.IsGuid()) throw new ValidationException("Id must be a GUID"); if (Name.IsEmpty()) throw new ValidationException("Field Name is empty"); if (Description.IsEmpty()) throw new ValidationException("Field Description is empty"); + if (IngredientsItems.Count == 0) throw new ValidationException("Field IngredientsItems is empty"); } } } \ No newline at end of file diff --git a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs index ebe3356..bfabcf1 100644 --- a/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs +++ b/CandyHouseSolution/CandyHouseTests/DataModelsTests/ProductDataModelTests.cs @@ -15,7 +15,8 @@ namespace CandyHouseTests.DataModelsTests var id = Guid.NewGuid().ToString(); var name = "Candy"; var description = "Delicious candy"; - var ingredients = new List(); + var ingredients = new List() + { new IngredientDataModel(Guid.NewGuid().ToString(), "sugar", "Sugar", 10) }; var product = new ProductDataModel(id, name, description, ingredients); Assert.AreEqual(id, product.Id); @@ -30,7 +31,8 @@ namespace CandyHouseTests.DataModelsTests var invalidId = ""; var name = "Candy"; var description = "Delicious candy"; - var ingredients = new List(); + var ingredients = new List() + { new IngredientDataModel(Guid.NewGuid().ToString(), "sugar", "Sugar", 10) }; var product = new ProductDataModel(invalidId, name, description, ingredients); Assert.Throws(() => product.Validate()); @@ -42,7 +44,8 @@ namespace CandyHouseTests.DataModelsTests var id = Guid.NewGuid().ToString(); var invalidName = ""; var description = "Delicious candy"; - var ingredients = new List(); + var ingredients = new List() + { new IngredientDataModel(Guid.NewGuid().ToString(), "sugar", "Sugar", 10) }; var product = new ProductDataModel(id, invalidName, description, ingredients); Assert.Throws(() => product.Validate()); @@ -50,6 +53,19 @@ namespace CandyHouseTests.DataModelsTests [Test] public void CreateProductDataModel_InvalidDescription_ShouldThrowArgumentException() + { + var id = Guid.NewGuid().ToString(); + var name = "Candy"; + var invalidDescription = ""; + var ingredients = new List() + { new IngredientDataModel(Guid.NewGuid().ToString(), "sugar", "Sugar", 10) }; + var product = new ProductDataModel(id, name, invalidDescription, ingredients); + + Assert.Throws(() => product.Validate()); + } + + [Test] + public void CreateProductDataModel_InvalidIngredients_ShouldThrowArgumentException() { var id = Guid.NewGuid().ToString(); var name = "Candy"; -- 2.25.1