Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 5
0
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'
Esempio n. 6
0
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')
Esempio n. 8
0
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
Esempio n. 9
0
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