def test_simple_event(): json = { 'type': 'node_updated', 'what': 'node-id', 'who': { 'id': 'user-id', 'username': '******', }, 'sessionId': 'test-session', } expected_any_event = AnyMapEvent( type=EventType.node_updated, what='node-id', who=MapEventUser( id='user-id', username='******', ), session_id='test-session', ) actual_any_event = AnyMapEvent(**json) assert expected_any_event == actual_any_event expected_typed_event = NodeUpdatedMapEvent( type=EventType.node_updated, what='node-id', who=MapEventUser( id='user-id', username='******', ), session_id='test-session', ) actual_typed_event = any_event_to_typed(actual_any_event) assert expected_typed_event == actual_typed_event
def test_event_with_data(): json = { 'type': 'search_query_saved', 'what': 'node-id', 'who': { 'id': 'user-id', 'username': '******', }, 'data': { 'id': 'search-id', 'title': 'Foo', 'query': 'search query', 'timestamp': 123, 'user_id': 'user-id', } } expected_any_event = AnyMapEvent( type=EventType.search_query_saved, what='node-id', who=MapEventUser( id='user-id', username='******', ), session_id=None, data=json['data'], ) actual_any_event = AnyMapEvent(**json) assert expected_any_event == actual_any_event expected_typed_event = SearchQuerySavedMapEvent( type=EventType.search_query_saved, what='node-id', who=MapEventUser( id='user-id', username='******', ), session_id=None, data=SearchQuerySavedData( id='search-id', title='Foo', query='search query', timestamp=123, user_id='user-id', ), ) actual_typed_event = any_event_to_typed(actual_any_event) assert expected_typed_event == actual_typed_event
async def test_initially_empty_event_queue(): completed: Future[Tuple[datetime, TypedMapEvent]] = Future() class Consumer(EventConsumer): async def consume(self, timestamp: datetime, actual_event: TypedMapEvent): completed.set_result((timestamp, actual_event)) api = MockEventsApi( events=[], map_id='map-id', kv_prefix='map-prefix', ) listener = MapsListener(api) listener.add_map('map-id', 'map-prefix', Consumer(), None) await api.wait_for_drain() expected_event = NodeUpdatedMapEvent( type=EventType.node_updated, who=MapEventUser( id='user-id', username='******', ), what='node-id', session_id=None ) api.push_event( KvEntry(key=['0'], value=expected_event.dict()) ) result = await wait_for(completed, 10) assert result == (datetime.utcfromtimestamp(0), expected_event) listener.remove_map('map-id')
async def test_skip_unknown_event_inside_compound(): processed_events = [] async def consumer(_: datetime, actual_event: TypedMapEvent): processed_events.append(actual_event) who = MapEventUser( id='user', username='******', ) first_event = NodeUpdatedMapEvent( type=EventType.node_updated, what='first', who=who, ) unknown_event = { 'type': 'unknown_event', } second_event = NodeDeletedMapEvent( type=EventType.node_deleted, what='second', who=who, ) wrapper_event = CompoundMapEvent( type=EventType.node_created, what='root', who=who, additional=[ first_event.dict(), unknown_event, second_event.dict(), ], ) event = KvEntry( key=['0'], value=wrapper_event.dict(), ) await process_event( map_id='map', consume=consumer, event=event, skip_unknown_events=True ) expected_events = [ any_event_to_typed(wrapper_event), first_event, second_event, ] assert expected_events == processed_events
async def test_visitor_uses_default_result(): event = NodeDeletedMapEvent(type=EventType.node_deleted, who=MapEventUser( id='user-id', username='******', ), what='node-id') visitor = MockVisitor('default') result = await event.visit(visitor) assert result == 'default'
async def test_visitor_accepts_events(): event = NodeUpdatedMapEvent(type=EventType.node_updated, who=MapEventUser( id='user-id', username='******', ), what='node-id') visitor = MockVisitor('default') result = await event.visit(visitor) assert result == 'event_accepted'
async def test_filled_event_queue_with_offset(): completed: Future[Tuple[datetime, TypedMapEvent]] = Future() class Consumer(EventConsumer): async def consume(self, timestamp: datetime, actual_event: TypedMapEvent): completed.set_result((timestamp, actual_event)) old_event = CompoundMapEvent( type=EventType.node_updated, who=MapEventUser( id='user-id', username='******', ), what='node-id', session_id=None ).dict() api = MockEventsApi( events=[ KvEntry(key=['0'], value=old_event), KvEntry(key=['1'], value=old_event), KvEntry(key=['2'], value=old_event), ], map_id='map-id', kv_prefix='map-prefix', ) listener = MapsListener(api) listener.add_map('map-id', 'map-prefix', Consumer(), '1') api.push_event( KvEntry(key=['2'], value=old_event) ) result = await wait_for(completed, 10) assert result == (datetime.utcfromtimestamp(0.002), NodeUpdatedMapEvent(**old_event)) listener.remove_map('map-id')
def test_parse_compound_event(): json_who = { 'id': 'user-id', 'username': '******', } json = { 'type': 'node_updated', 'what': 'node-id', 'who': json_who, 'sessionId': 'test-session', 'additional': [ { 'type': 'node_created', 'what': 'node-id-2', 'sessionId': 'test-session-2', }, { 'type': 'node_deleted', 'what': 'node-id-3', }, ], } who = MapEventUser( id='user-id', username='******', ) expected = [ NodeUpdatedMapEvent(type=EventType.node_updated, what='node-id', who=who, session_id='test-session'), NodeCreatedMapEvent(type=EventType.node_created, what='node-id-2', who=who, session_id='test-session-2'), NodeDeletedMapEvent(type=EventType.node_deleted, what='node-id-3', who=who, session_id=None), ] actual = parse_compound_event('map', json, False) assert expected == actual
def test_parse_empty_compound_event(): json = { 'type': 'node_updated', 'what': 'node-id', 'who': { 'id': 'user-id', 'username': '******', }, 'sessionId': 'test-session', } expected = [ NodeUpdatedMapEvent( type=EventType.node_updated, who=MapEventUser( id='user-id', username='******', ), what='node-id', session_id='test-session', ), ] actual = parse_compound_event('map', json, False) assert expected == actual