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()); } }