Files
python-fun/tests/test_classified_ad.py

116 lines
2.9 KiB
Python

from decimal import Decimal
from uuid import uuid4
import pytest
from domain.marketplace.classified_ad import ClassifiedAd
from domain.marketplace.classified_ad_id import ClassifiedAdId
from domain.marketplace.price import Price
from domain.marketplace.user_id import UserId
def test_classified_ad_creation():
ad_id = ClassifiedAdId(value=uuid4())
owner_id = UserId(value=uuid4())
ad = ClassifiedAd(
id=ad_id,
_ownerId=owner_id,
title="Test Title",
text="Test text content",
price=Price(amount=Decimal("99.99")),
)
assert ad.id == ad_id
assert ad._ownerId == owner_id
assert ad.title == "Test Title"
assert ad.text == "Test text content"
assert ad.price == Price(amount=Decimal("99.99"))
def test_classified_ad_can_not_be_created_without_id():
with pytest.raises(TypeError):
ClassifiedAd(
_ownerId=UserId(value=uuid4()),
title="Title",
text="Text",
price=Price(amount=Decimal("10.00")),
)
def test_classified_ad_can_not_be_created_without_owner_id():
with pytest.raises(TypeError):
ClassifiedAd(
id=ClassifiedAdId(value=uuid4()),
title="Title",
text="Text",
price=Price(amount=Decimal("10.00")),
)
def test_classified_ad_can_be_created_without_price():
ad_id = ClassifiedAdId(value=uuid4())
owner_id = UserId(value=uuid4())
ad = ClassifiedAd(
id=ad_id,
_ownerId=owner_id,
title="Test Title",
text="Test text content",
)
assert ad.id == ad_id
assert ad._ownerId == owner_id
assert ad.title == "Test Title"
assert ad.text == "Test text content"
assert ad.price == Price(amount=Decimal("0.00"))
def test_classified_ad_can_not_have_negative_price():
with pytest.raises(ValueError):
ClassifiedAd(
id=ClassifiedAdId(value=uuid4()),
_ownerId=UserId(value=uuid4()),
title="Title",
text="Text",
price=Price(amount=Decimal("-10.00")),
)
def test_classified_ad_is_immutable():
ad = ClassifiedAd(
id=ClassifiedAdId(value=uuid4()),
_ownerId=UserId(value=uuid4()),
title="Title",
text="Text",
price=Price(amount=Decimal("10.00")),
)
try:
ad.title = "New Title" # type: ignore
assert False, "Should have raised FrozenInstanceError"
except AttributeError:
pass
def test_classified_ad_equality():
ad_id = ClassifiedAdId(value=uuid4())
owner_id = UserId(value=uuid4())
ad1 = ClassifiedAd(
id=ad_id,
_ownerId=owner_id,
title="Title",
text="Text",
price=Price(amount=Decimal("10.00")),
)
ad2 = ClassifiedAd(
id=ad_id,
_ownerId=owner_id,
title="Title",
text="Text",
price=Price(amount=Decimal("10.00")),
)
assert ad1 == ad2