using NUnit.Framework; using SnowMaidenContracts.Enums; using SnowMaidenContracts.DataModels; using SnowMaidenContracts.Exceptions; namespace SnowMaidenTests.DataModelsTest; [TestFixture] internal class ProductDMTest { [Test] public void IdIsNullOrEmptyTest() { var product = CreateDataModel(null, "name", ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(string.Empty, "name", ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void IdIsNotGuidTest() { var product = CreateDataModel("id", "name", ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ProductNameIsEmptyTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ProductTypeIsNoneTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.None, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ManufacturerIdIsNullOrEmptyTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void ManufacturerIdIsNotGuidTest() { var product = CreateDataModel("Mid", "name", ProductType.Souvenir, 10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void PriceIsLessOrZeroTest() { var product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Souvenir, 0, false); Assert.That(() => product.Validate(), Throws.TypeOf()); product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Souvenir, -10, false); Assert.That(() => product.Validate(), Throws.TypeOf()); } [Test] public void AllFieldsIsCorrectTest() { var productId = Guid.NewGuid().ToString(); var productName = "name"; var productType = ProductType.Souvenir; var productManufacturerId = Guid.NewGuid().ToString(); var productPrice = 10; var productIsDelete = false; var product = CreateDataModel(productId, productName, productType, productPrice, productIsDelete); 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.Price, Is.EqualTo(productPrice)); Assert.That(product.IsDeleted, Is.EqualTo(productIsDelete)); }); } private static ProductDataModel CreateDataModel(string? id, string? productName, ProductType productType, double price, bool isDeleted) => new(id, productName, productType, price, isDeleted); }