47 lines
1.2 KiB
C#
47 lines
1.2 KiB
C#
namespace Domain.Tests;
|
|
|
|
/// <summary>Unit tests for the <see cref="OrderMoney"/> value object.</summary>
|
|
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<ArgumentOutOfRangeException>(() => OrderMoney.From(-1));
|
|
Assert.Throws<ArgumentOutOfRangeException>(() => _ = (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());
|
|
}
|
|
}
|