128 lines
5.8 KiB
C#
Raw Normal View History

2025-02-19 09:24:22 +04:00
using WildPlumContracts.DataModels;
using WildPlumContracts.Enums;
using WildPlumContracts.Exceptions;
namespace WildPlumTests.DataModelTests;
[TestFixture]
public class OrderDataModelTests
{
[Test]
public void Validate_ThrowsException_WhenIdIsNullOrEmpty()
{
Assert.Multiple(() =>
{
Assert.That(() => CreateDataModel(null, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
Assert.That(() => CreateDataModel(string.Empty, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
});
}
[Test]
public void Validate_ThrowsException_WhenIdIsNotGuid()
{
Assert.That(() => CreateDataModel("invalid-guid", Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
}
[Test]
public void Validate_ThrowsException_WhenWarehouseIdIsNullOrEmpty()
{
Assert.Multiple(() =>
{
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), null, Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), string.Empty, Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
});
}
[Test]
public void Validate_ThrowsException_WhenWarehouseIdIsNotGuid()
{
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), "invalid-guid", Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
}
[Test]
public void Validate_ThrowsException_WhenWorkerIdIsNullOrEmpty()
{
Assert.Multiple(() =>
{
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), string.Empty, "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
});
}
[Test]
public void Validate_ThrowsException_WhenWorkerIdIsNotGuid()
{
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "invalid-guid", "John Doe", OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
}
[Test]
public void Validate_ThrowsException_WhenCustomerNameIsNullOrEmpty()
{
Assert.Multiple(() =>
{
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), null, OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), string.Empty, OrderStatus.Pending, DateTime.Now, CreateSubDataModel()).Validate(),
Throws.TypeOf<ValidationException>());
});
}
[Test]
public void Validate_ThrowsException_WhenProductsListIsEmptyOrNull()
{
Assert.Multiple(() =>
{
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, null).Validate(),
Throws.TypeOf<ValidationException>());
Assert.That(() => CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "John Doe", OrderStatus.Pending, DateTime.Now, new List<OrderProductDataModel>()).Validate(),
Throws.TypeOf<ValidationException>());
});
}
[Test]
public void AllFieldsAreCorrectTest()
{
var id = Guid.NewGuid().ToString();
var warehouseId = Guid.NewGuid().ToString();
var workerId = Guid.NewGuid().ToString();
var customerName = "John Doe";
var status = OrderStatus.Pending;
var orderDate = DateTime.Now;
var products = CreateSubDataModel();
var order = CreateDataModel(id, warehouseId, workerId, customerName, status, orderDate, products);
Assert.That(() => order.Validate(), Throws.Nothing);
Assert.Multiple(() =>
{
Assert.That(order.Id, Is.EqualTo(id));
Assert.That(order.WarehouseId, Is.EqualTo(warehouseId));
Assert.That(order.WorkerId, Is.EqualTo(workerId));
Assert.That(order.CustomerName, Is.EqualTo(customerName));
Assert.That(order.Status, Is.EqualTo(status));
Assert.That(order.OrderDate, Is.EqualTo(orderDate).Within(TimeSpan.FromSeconds(1)));
Assert.That(order.Products, Is.EquivalentTo(products));
});
}
private static OrderDataModel CreateDataModel(string? id, string? warehouseId, string? workerId, string? customerName, OrderStatus status, DateTime orderDate, List<OrderProductDataModel>? products) =>
new(id, warehouseId, workerId, customerName, status, orderDate, products);
private static List<OrderProductDataModel> CreateSubDataModel() =>
new() { new OrderProductDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1) };
}