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)