using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using PuferFishContracts.DataModels; using PuferFishContracts.Enums; using PuferFishContracts.Infrastructure; using PuferFishContracts.Extensions; using PuferFishContracts.Exceptions; namespace PuferFishTests.DataModelsTests; internal class ProductDataModelTests { [Test] public void IdIsNullOrEmptyTest() { var product = CreateDataModel(null, "name", ProductType.Pizza, Guid.NewGuid().ToString(), 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(string.Empty, "name", ProductType.Pizza, Guid.NewGuid().ToString(), 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void IdIsNotGuidTest() { var product = CreateDataModel("id", "name", ProductType.Pizza, Guid.NewGuid().ToString(), 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ProductNameIsNullOrEmptyTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.Pizza, Guid.NewGuid().ToString(), 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, ProductType.Pizza, Guid.NewGuid().ToString(), 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ProductTypeIsNoneTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.None, Guid.NewGuid().ToString(), 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ReastaurantIdIsNullOrEmptyTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Pizza, null, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Pizza, string.Empty, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ReastaurantIdIsNotGuidTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Pizza, "restaurantId", 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void PriceIsLessOrZeroTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.Pizza, Guid.NewGuid().ToString(), 0, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, ProductType.Pizza, Guid.NewGuid().ToString(), -500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void SuppliesIsNullOrEmptyTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Pizza, Guid.NewGuid().ToString(), 0, null, CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Pizza, Guid.NewGuid().ToString(), 0, [], CreateWarehouseDataModel(), false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void WarehouseIsNullOrEmptyTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Pizza, Guid.NewGuid().ToString(), 0, CreateSuppliesDataModel(), null, false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Pizza, Guid.NewGuid().ToString(), 0, CreateSuppliesDataModel(), [], false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void AllFieldsIsCorrectTest() { var productId = Guid.NewGuid().ToString(); var productName = "name"; var productType = ProductType.Pizza; var productRestaurantId = Guid.NewGuid().ToString(); var productPrice = 500; var supplies = CreateSuppliesDataModel(); var warehouse = CreateWarehouseDataModel(); var productIsDeleted = false; var product = CreateDataModel(productId, productName, productType, productRestaurantId, productPrice, supplies, warehouse, productIsDeleted); Assert.That(() => product.Validate(), Throws.Nothing); Assert.Multiple(() => { Assert.That(product.Id, Is.EqualTo(productId)); Assert.That(product.ProductName, Is.EqualTo(productName)); Assert.That(product.ProductType, Is.EqualTo(productType)); Assert.That(product.RestaurantId, Is.EqualTo(productRestaurantId)); Assert.That(product.Price, Is.EqualTo(productPrice)); Assert.That(product.Supplies, Is.EqualTo(supplies)); Assert.That(product.Warehouse, Is.EqualTo(warehouse)); Assert.That(product.IsDeleted, Is.EqualTo(productIsDeleted)); }); } private static ProductDataModel CreateDataModel(string? id, string? productName, ProductType productType, string? productRestaurantId, double price, List? supplies, List? warehouse, bool isDeleted) => new(id, productName, productType, productRestaurantId, price, supplies, warehouse, isDeleted); private static List CreateSuppliesDataModel() => [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1)]; private static List CreateWarehouseDataModel() => [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1)]; }