def test_cache_raises_aggregate_not_found_when_projector_func_returns_none( self): transcoder = JSONTranscoder() transcoder.register(UUIDAsHex()) transcoder.register(DecimalAsStr()) transcoder.register(DatetimeAsISO()) transcoder.register(EmailAddressAsStr()) event_recorder = SQLiteAggregateRecorder(SQLiteDatastore(":memory:")) event_recorder.create_table() event_store = EventStore( mapper=Mapper(transcoder=transcoder), recorder=event_recorder, ) repository = Repository( event_store, cache_maxsize=2, ) aggregate = Aggregate() event_store.put(aggregate.collect_events()) self.assertEqual(1, repository.get(aggregate.id).version) aggregate.trigger_event(Aggregate.Event) event_store.put(aggregate.collect_events()) with self.assertRaises(AggregateNotFound): repository.get(aggregate.id, projector_func=lambda _, __: None)
def test_cache_fastforward_false(self): transcoder = JSONTranscoder() transcoder.register(UUIDAsHex()) transcoder.register(DecimalAsStr()) transcoder.register(DatetimeAsISO()) transcoder.register(EmailAddressAsStr()) event_recorder = SQLiteAggregateRecorder(SQLiteDatastore(":memory:")) event_recorder.create_table() event_store = EventStore( mapper=Mapper(transcoder=transcoder), recorder=event_recorder, ) repository = Repository( event_store, cache_maxsize=2, fastforward=False, ) aggregate = Aggregate() event_store.put(aggregate.collect_events()) self.assertEqual(1, repository.get(aggregate.id).version) aggregate.trigger_event(Aggregate.Event) event_store.put(aggregate.collect_events()) self.assertEqual(1, repository.get(aggregate.id).version)
def test_cache_maxsize_nonzero(self): transcoder = JSONTranscoder() transcoder.register(UUIDAsHex()) transcoder.register(DecimalAsStr()) transcoder.register(DatetimeAsISO()) transcoder.register(EmailAddressAsStr()) event_recorder = SQLiteAggregateRecorder(SQLiteDatastore(":memory:")) event_recorder.create_table() event_store = EventStore( mapper=Mapper(transcoder=transcoder), recorder=event_recorder, ) repository = Repository(event_store, cache_maxsize=2) self.assertEqual(type(repository.cache), LRUCache) aggregate1 = Aggregate() self.assertFalse(aggregate1.id in repository) event_store.put(aggregate1.collect_events()) self.assertTrue(aggregate1.id in repository) aggregate2 = Aggregate() self.assertFalse(aggregate2.id in repository) event_store.put(aggregate2.collect_events()) self.assertTrue(aggregate2.id in repository) aggregate3 = Aggregate() self.assertFalse(aggregate3.id in repository) event_store.put(aggregate3.collect_events()) self.assertTrue(aggregate3.id in repository) self.assertFalse(aggregate1.id in repository.cache.cache) self.assertEqual(1, repository.get(aggregate1.id).version) self.assertEqual(1, repository.get(aggregate2.id).version) self.assertEqual(1, repository.get(aggregate3.id).version) aggregate1.trigger_event(Aggregate.Event) event_store.put(aggregate1.collect_events()) self.assertEqual(2, repository.get(aggregate1.id).version)
def test_trigger_event(self): a = Aggregate() # Check the aggregate can trigger further events. a.trigger_event(AggregateEvent) self.assertLess(a.created_on, a.modified_on) pending = a.collect_events() self.assertEqual(len(pending), 2) self.assertIsInstance(pending[0], AggregateCreated) self.assertEqual(pending[0].originator_version, 1) self.assertIsInstance(pending[1], AggregateEvent) self.assertEqual(pending[1].originator_version, 2)
def test_call_base_class(self): before_created = datetime.now(tz=TZINFO) a = Aggregate() after_created = datetime.now(tz=TZINFO) self.assertIsInstance(a, Aggregate) self.assertIsInstance(a.id, UUID) self.assertIsInstance(a.version, int) self.assertEqual(a.version, 1) self.assertIsInstance(a.created_on, datetime) self.assertIsInstance(a.modified_on, datetime) self.assertEqual(a.created_on, a.modified_on) self.assertGreater(a.created_on, before_created) self.assertGreater(after_created, a.created_on) events = a.collect_events() self.assertIsInstance(events[0], AggregateCreated) self.assertEqual("Aggregate.Created", type(events[0]).__qualname__)
def test_contains(self): transcoder = JSONTranscoder() transcoder.register(UUIDAsHex()) transcoder.register(DecimalAsStr()) transcoder.register(DatetimeAsISO()) event_recorder = POPOAggregateRecorder() event_store = EventStore( mapper=Mapper(transcoder=transcoder), recorder=event_recorder, ) aggregate = Aggregate() event_store.put(aggregate.collect_events()) repository = Repository(event_store) self.assertTrue(aggregate.id in repository) self.assertFalse(uuid4() in repository)