diff --git a/domain/__init__.py b/domain/__init__.py index d27fd9a..e934847 100644 --- a/domain/__init__.py +++ b/domain/__init__.py @@ -1 +1 @@ -from .marketplace import classified_ad as classified_ad \ No newline at end of file +from .marketplace import classified_ad as classified_ad diff --git a/domain/marketplace/__init__.py b/domain/marketplace/__init__.py index daa252c..93c3132 100644 --- a/domain/marketplace/__init__.py +++ b/domain/marketplace/__init__.py @@ -1,2 +1,3 @@ from .classified_ad import ClassifiedAd as ClassifiedAd -from .user_id import UserId as UserId \ No newline at end of file +from .classified_ad_id import ClassifiedAdId as ClassifiedAdId +from .user_id import UserId as UserId diff --git a/domain/marketplace/classified_ad.py b/domain/marketplace/classified_ad.py index ab9ec4e..60edc5f 100644 --- a/domain/marketplace/classified_ad.py +++ b/domain/marketplace/classified_ad.py @@ -1,13 +1,13 @@ from dataclasses import dataclass from decimal import Decimal -from uuid import UUID +from domain.marketplace.classified_ad_id import ClassifiedAdId from domain.marketplace.user_id import UserId @dataclass(frozen=True) class ClassifiedAd: - id: UUID + id: ClassifiedAdId _ownerId: UserId title: str text: str diff --git a/domain/marketplace/classified_ad_id.py b/domain/marketplace/classified_ad_id.py new file mode 100644 index 0000000..5e1d700 --- /dev/null +++ b/domain/marketplace/classified_ad_id.py @@ -0,0 +1,7 @@ +from dataclasses import dataclass +from uuid import UUID + + +@dataclass(frozen=True) +class ClassifiedAdId: + value: UUID diff --git a/tests/test_classified_ad.py b/tests/test_classified_ad.py index 5775d51..5175e6c 100644 --- a/tests/test_classified_ad.py +++ b/tests/test_classified_ad.py @@ -4,11 +4,12 @@ from uuid import uuid4 import pytest from domain.marketplace.classified_ad import ClassifiedAd +from domain.marketplace.classified_ad_id import ClassifiedAdId from domain.marketplace.user_id import UserId def test_classified_ad_creation(): - ad_id = uuid4() + ad_id = ClassifiedAdId(value=uuid4()) owner_id = UserId(value=uuid4()) ad = ClassifiedAd( @@ -28,24 +29,26 @@ def test_classified_ad_creation(): def test_classified_ad_can_not_be_created_without_id(): with pytest.raises(TypeError): - ad = ClassifiedAd( + ClassifiedAd( _ownerId=UserId(value=uuid4()), title="Title", text="Text", _price=Decimal("10.00"), ) + def test_classified_ad_can_not_be_created_without_owner_id(): with pytest.raises(TypeError): - ad = ClassifiedAd( - id=UserId(value=uuid4()), + ClassifiedAd( + id=ClassifiedAdId(value=uuid4()), title="Title", text="Text", _price=Decimal("10.00"), ) + def test_classified_ad_can_be_created_without_price(): - ad_id = uuid4() + ad_id = ClassifiedAdId(value=uuid4()) owner_id = UserId(value=uuid4()) ad = ClassifiedAd( @@ -61,9 +64,10 @@ def test_classified_ad_can_be_created_without_price(): assert ad.text == "Test text content" assert ad._price == Decimal("0.00") + def test_classified_ad_is_immutable(): ad = ClassifiedAd( - id=uuid4(), + id=ClassifiedAdId(value=uuid4()), _ownerId=UserId(value=uuid4()), title="Title", text="Text", @@ -78,7 +82,7 @@ def test_classified_ad_is_immutable(): def test_classified_ad_equality(): - ad_id = uuid4() + ad_id = ClassifiedAdId(value=uuid4()) owner_id = UserId(value=uuid4()) ad1 = ClassifiedAd( diff --git a/tests/test_classified_ad_id.py b/tests/test_classified_ad_id.py new file mode 100644 index 0000000..ca146e9 --- /dev/null +++ b/tests/test_classified_ad_id.py @@ -0,0 +1,25 @@ +from uuid import UUID, uuid4 + +from domain.marketplace.classified_ad_id import ClassifiedAdId + + +def test_classified_ad_id_creation(): + ad_id = ClassifiedAdId(value=uuid4()) + assert isinstance(ad_id.value, UUID) + + +def test_classified_ad_id_is_immutable(): + ad_id = ClassifiedAdId(value=uuid4()) + + try: + ad_id.value = uuid4() # type: ignore + assert False, "Should have raised FrozenInstanceError" + except AttributeError: + pass + + +def test_classified_ad_id_equality(): + uid = uuid4() + ad_id1 = ClassifiedAdId(value=uid) + ad_id2 = ClassifiedAdId(value=uid) + assert ad_id1 == ad_id2