feat: add max 2 decimal places validation to Money
This commit is contained in:
@@ -6,6 +6,12 @@ from decimal import Decimal
|
||||
class Money:
|
||||
amount: Decimal
|
||||
|
||||
def __post_init__(self):
|
||||
if self.amount.as_tuple().exponent < -2:
|
||||
raise ValueError(
|
||||
f"Money amount cannot have more than 2 decimal places: {self.amount}"
|
||||
)
|
||||
|
||||
def __add__(self, other):
|
||||
return Money(self.amount + other.amount)
|
||||
|
||||
|
||||
@@ -6,5 +6,6 @@ from domain.marketplace.money import Money
|
||||
@dataclass(frozen=True)
|
||||
class Price(Money):
|
||||
def __post_init__(self):
|
||||
super().__post_init__()
|
||||
if self.amount < 0:
|
||||
raise ValueError(f"Price cannot be negative: {self.amount}")
|
||||
|
||||
@@ -37,3 +37,26 @@ def test_money_substract():
|
||||
money1 = Money(amount=Decimal("5.00"))
|
||||
money2 = Money(amount=Decimal("3.00"))
|
||||
assert (money1 - money2) == Money(amount=Decimal("2.00"))
|
||||
|
||||
|
||||
def test_money_can_not_have_more_than_two_decimals():
|
||||
try:
|
||||
Money(amount=Decimal("1.234"))
|
||||
assert False, "Should have raised ValueError"
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
def test_money_allows_two_decimals():
|
||||
money = Money(amount=Decimal("1.23"))
|
||||
assert money.amount == Decimal("1.23")
|
||||
|
||||
|
||||
def test_money_allows_one_decimal():
|
||||
money = Money(amount=Decimal("1.2"))
|
||||
assert money.amount == Decimal("1.2")
|
||||
|
||||
|
||||
def test_money_allows_no_decimals():
|
||||
money = Money(amount=Decimal(1))
|
||||
assert money.amount == Decimal(1)
|
||||
|
||||
Reference in New Issue
Block a user