80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
from dataclasses import dataclass
|
|
from uuid import uuid4
|
|
|
|
from domain.framework.entity import Entity
|
|
from domain.marketplace.domain_event import (
|
|
ClassifiedAdCreated,
|
|
ClassifiedAdSentForReview,
|
|
DomainEvent,
|
|
)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class TestEntity(Entity):
|
|
__test__ = False
|
|
_events: tuple[DomainEvent, ...] = ()
|
|
|
|
|
|
def test_entity_creation():
|
|
entity = TestEntity()
|
|
assert entity.get_changes() == ()
|
|
|
|
|
|
def test_raise_event_returns_new_instance_with_event():
|
|
entity = TestEntity()
|
|
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
|
|
|
|
new_entity = entity.raise_event(event)
|
|
|
|
assert new_entity.get_changes() == (event,)
|
|
|
|
|
|
def test_raise_event_does_not_mutate_original():
|
|
entity = TestEntity()
|
|
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
|
|
|
|
entity.raise_event(event)
|
|
|
|
assert entity.get_changes() == ()
|
|
|
|
|
|
def test_multiple_events_accumulate():
|
|
entity = TestEntity()
|
|
event1 = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
|
|
event2 = ClassifiedAdSentForReview(id=uuid4())
|
|
|
|
entity = entity.raise_event(event1)
|
|
entity = entity.raise_event(event2)
|
|
|
|
assert entity.get_changes() == (event1, event2)
|
|
|
|
|
|
def test_clear_changes_returns_instance_with_empty_events():
|
|
entity = TestEntity()
|
|
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
|
|
entity = entity.raise_event(event)
|
|
|
|
cleared = entity.clear_changes()
|
|
|
|
assert cleared.get_changes() == ()
|
|
|
|
|
|
def test_clear_changes_does_not_mutate_original():
|
|
entity = TestEntity()
|
|
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
|
|
entity = entity.raise_event(event)
|
|
|
|
entity.clear_changes()
|
|
|
|
assert entity.get_changes() == (event,)
|
|
|
|
|
|
def test_get_changes_returns_tuple():
|
|
entity = TestEntity()
|
|
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
|
|
entity = entity.raise_event(event)
|
|
|
|
changes = entity.get_changes()
|
|
|
|
assert isinstance(changes, tuple)
|