2025-03-09 14:48:09 +04:00

106 lines
5.2 KiB
C#

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.Rolls, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
product = CreateDataModel(string.Empty, "name", ProductType.Rolls, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void IdIsNotGuidTest()
{
var product = CreateDataModel("id", "name", ProductType.Rolls, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void ProductNameIsNullOrEmptyTest()
{
var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.Rolls, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
product = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, ProductType.Rolls, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void ProductTypeIsNoneTest()
{
var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.None, 500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void PriceIsLessOrZeroTest()
{
var product = CreateDataModel(Guid.NewGuid().ToString(), null, ProductType.Rolls, 0, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
product = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, ProductType.Rolls, -500, CreateSuppliesDataModel(), CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SuppliesIsNullOrEmptyTest()
{
var product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Rolls, 0, null, CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Rolls, 0, [], CreateWarehouseDataModel(), false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void WarehouseIsNullOrEmptyTest()
{
var product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Rolls, 0, CreateSuppliesDataModel(), null, false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
product = CreateDataModel(Guid.NewGuid().ToString(), "name", ProductType.Rolls, 0, CreateSuppliesDataModel(), [], false);
Assert.That(() => product.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void AllFieldsIsCorrectTest()
{
var productId = Guid.NewGuid().ToString();
var productName = "name";
var productType = ProductType.Rolls;
var productRestaurantId = Guid.NewGuid().ToString();
var productPrice = 500;
var supplies = CreateSuppliesDataModel();
var warehouse = CreateWarehouseDataModel();
var productIsDeleted = false;
var product = CreateDataModel(productId, productName, productType, 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.Price, Is.EqualTo(productPrice));
Assert.That(product.Supplies, Is.EqualTo(supplies));
Assert.That(product.Shop, Is.EqualTo(warehouse));
Assert.That(product.IsDeleted, Is.EqualTo(productIsDeleted));
});
}
private static ProductDataModel CreateDataModel(string? id, string? productName, ProductType productType, double price, List<SupplyProductDataModel>? supplies, List<ShopProductDataModel>? shop, bool isDeleted) =>
new(id, productName, productType, price, supplies, shop, isDeleted);
private static List<SupplyProductDataModel> CreateSuppliesDataModel()
=> [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1)];
private static List<ShopProductDataModel> CreateWarehouseDataModel()
=> [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1)];
}