Source code for examples.aggregate7.test_application

from __future__ import annotations

from datetime import datetime
from unittest import TestCase

from eventsourcing.domain import put_metadata_in_context
from examples.aggregate7.application import DogSchool
from examples.aggregate7.domainmodel import project_dog


[docs] class TestDogSchool(TestCase):
[docs] def test_dog_school(self) -> None: # Construct application object. school = DogSchool() # Evolve application state. with put_metadata_in_context({"user_id": "user-1"}): dog_id = school.register_dog("Fido") school.add_trick(dog_id, "roll over") school.add_trick(dog_id, "play dead") # Query application state. dog = school.get_dog(dog_id) self.assertEqual(dog["name"], "Fido") self.assertEqual(dog["tricks"], ("roll over", "play dead")) self.assertIsInstance(dog["created_on"], datetime) self.assertIsInstance(dog["modified_on"], datetime) # Select notifications. notifications = school.notification_log.select(start=1, limit=10) assert len(notifications) == 3 # Take snapshot. with put_metadata_in_context({"user_id": "admin-1"}): school.take_snapshot(dog_id, version=3, projector_func=project_dog) dog = school.get_dog(dog_id) self.assertEqual(dog["name"], "Fido") self.assertEqual(dog["tricks"], ("roll over", "play dead")) self.assertIsInstance(dog["created_on"], datetime) self.assertIsInstance(dog["modified_on"], datetime) # Continue with snapshotted aggregate. with put_metadata_in_context({"user_id": "user-1"}): school.add_trick(dog_id, "fetch ball") dog = school.get_dog(dog_id) self.assertEqual(dog["name"], "Fido") self.assertEqual(dog["tricks"], ("roll over", "play dead", "fetch ball")) self.assertIsInstance(dog["created_on"], datetime) self.assertIsInstance(dog["modified_on"], datetime) # Check metadata on events. events = list(school.events.get(dog_id)) assert len(events) > 0 for event in events: assert event.metadata.get("user_id") == "user-1" # Check metadata on snapshots. assert school.snapshots is not None snapshots = list(school.snapshots.get(dog_id)) assert len(snapshots) > 0 for snapshot in snapshots: assert snapshot.metadata.get("user_id") == "admin-1"