namespace Domain.Tests;
/// Unit tests for the value object.
public class OrderMoneyTests
{
[Fact]
public void From_keeps_the_cents()
{
Assert.Equal(150_00, OrderMoney.From(150_00).Cents);
}
[Fact]
public void Zero_is_valid()
{
Assert.Equal(0, OrderMoney.From(0).Cents);
}
[Fact]
public void Negative_cents_are_rejected()
{
Assert.Throws(() => OrderMoney.From(-1));
Assert.Throws(() => _ = (OrderMoney)(-1)); // conversion validates too
}
[Fact]
public void Money_compares_by_value_not_reference()
{
Assert.Equal(OrderMoney.From(150_00), OrderMoney.From(150_00));
Assert.NotEqual(OrderMoney.From(150_00), OrderMoney.From(151_00));
}
[Fact]
public void Converting_back_to_cents_is_explicit()
{
var money = OrderMoney.From(150_00);
Assert.Equal(150_00, (int)money);
Assert.Equal(150_00, money.Cents);
}
[Fact]
public void ToString_shows_the_cents()
{
Assert.Equal("15000", OrderMoney.From(150_00).ToString());
}
}