130 lines
3.9 KiB
Python
130 lines
3.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.classified_ad_text import ClassifiedAdText
|
|
from domain.marketplace.classified_ad_title import ClassifiedAdTitle
|
|
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=ClassifiedAdTitle(title="Test Title"),
|
|
text=ClassifiedAdText(text="Test text content"),
|
|
price=Price(amount=Decimal("99.99")),
|
|
)
|
|
|
|
assert ad.id == ad_id
|
|
assert ad._ownerId == owner_id
|
|
assert ad.title == ClassifiedAdTitle(title="Test Title")
|
|
assert ad.text == ClassifiedAdText(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=ClassifiedAdTitle(title="Title"),
|
|
text=ClassifiedAdText(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=ClassifiedAdTitle(title="Title"),
|
|
text=ClassifiedAdText(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=ClassifiedAdTitle(title="Test Title"),
|
|
text=ClassifiedAdText(text="Test text content"),
|
|
)
|
|
|
|
assert ad.id == ad_id
|
|
assert ad._ownerId == owner_id
|
|
assert ad.title == ClassifiedAdTitle(title="Test Title")
|
|
assert ad.text == ClassifiedAdText(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=ClassifiedAdTitle(title="Title"),
|
|
text=ClassifiedAdText(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=ClassifiedAdTitle(title="Title"),
|
|
text=ClassifiedAdText(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=ClassifiedAdTitle(title="Title"),
|
|
text=ClassifiedAdText(text="Text"),
|
|
price=Price(amount=Decimal("10.00")),
|
|
)
|
|
ad2 = ClassifiedAd(
|
|
id=ad_id,
|
|
_ownerId=owner_id,
|
|
title=ClassifiedAdTitle(title="Title"),
|
|
text=ClassifiedAdText(text="Text"),
|
|
price=Price(amount=Decimal("10.00")),
|
|
)
|
|
|
|
assert ad1 == ad2
|
|
|
|
|
|
def test_classified_ad_title_validation():
|
|
long_title = "a" * 101
|
|
with pytest.raises(ValueError):
|
|
ClassifiedAd(
|
|
id=ClassifiedAdId(value=uuid4()),
|
|
_ownerId=UserId(value=uuid4()),
|
|
title=ClassifiedAdTitle(title=long_title),
|
|
text=ClassifiedAdText(text="Text"),
|
|
price=Price(amount=Decimal("10.00")),
|
|
)
|