예제 #1
0
    def test_container_methods(self, config, mock_client_session):
        manager = ServiceManager.from_config(config, mock_client_session)

        assert 'ServiceOne' in manager
        assert 'ServiceTwo' in manager
        assert '__all__' not in manager
        assert len(manager) == 2
예제 #2
0
    async def test_search(self, config, bible1, mock_client_session):
        manager = ServiceManager.from_config(config, mock_client_session)
        manager.service_map['ServiceOne'].search.return_value = 'blah'

        result = await manager.search(bible1, ['one', 'two', 'three'],
                                      limit=10,
                                      offset=20)
        assert result == 'blah'
        manager.service_map['ServiceOne'].search.assert_called_once_with(
            bible1, ['one', 'two', 'three'], limit=10, offset=20)
예제 #3
0
    def test_init(self, services, config, mock_client_session):
        manager = ServiceManager.from_config(config, mock_client_session)

        assert manager.service_map['ServiceOne'].config is None
        assert (type(manager.service_map['ServiceOne']) ==
                services['ServiceOne'].side_effect)
        assert (manager.service_map['ServiceTwo'].config is
                config['services']['ServiceTwo'])
        assert (type(manager.service_map['ServiceTwo']) ==
                services['ServiceTwo'].side_effect)
예제 #4
0
    async def test_get_passage(self, config, bible2, mock_client_session):
        manager = ServiceManager.from_config(config, mock_client_session)
        manager.service_map['ServiceTwo'].get_passage.return_value = Passage(
            'blah', VerseRange.from_string('Genesis 1:2'))

        result = await manager.get_passage(
            bible2, VerseRange.from_string('Genesis 1:2'))

        assert result == Passage('blah', VerseRange.from_string('Genesis 1:2'),
                                 'BIB2')
        manager.service_map['ServiceTwo'].get_passage.assert_called_once_with(
            bible2, VerseRange.from_string('Genesis 1:2'))
예제 #5
0
    def test_from_config(
        self,
        mocker: pytest_mock.MockerFixture,
        services: dict[str, Any],
        config: Any,
        mock_client_session: aiohttp.ClientSession,
    ) -> None:
        manager = ServiceManager.from_config(config, mock_client_session)

        services['ServiceOne'].assert_called_once_with(
            config=None, session=mock_client_session)
        services['ServiceTwo'].assert_called_once_with(
            config=config['services']['ServiceTwo'],
            session=mock_client_session)
        assert manager.service_map['ServiceOne'] == mocker.sentinel.SERVICE_ONE
        assert manager.service_map['ServiceTwo'] == mocker.sentinel.SERVICE_TWO
예제 #6
0
    async def test_search_timeout(
        self,
        bible1: Bible,
        service_one: MockService,
        service_two: MockService,
    ) -> None:
        async def search(*args: Any, **kwargs: Any) -> None:
            await asyncio.sleep(0.5)

        manager = ServiceManager(
            {
                'ServiceOne': service_one,
                'ServiceTwo': service_two
            },
            timeout=0.1)
        service_one.search.side_effect = search

        with pytest.raises(ServiceSearchTimeout) as exc_info:
            await manager.search(bible1, ['one', 'two', 'three'])

        assert exc_info.value.bible == bible1
        assert exc_info.value.terms == ['one', 'two', 'three']
예제 #7
0
    async def test_search(
        self,
        config: Any,
        bible1: Bible,
        service_one: MockService,
        service_two: MockService,
    ) -> None:
        manager = ServiceManager({
            'ServiceOne': service_one,
            'ServiceTwo': service_two
        })
        service_one.search.return_value = SearchResults(verses=[], total=10)
        service_two.search.return_value = SearchResults(verses=[], total=20)

        result = await manager.search(bible1, ['one', 'two', 'three'],
                                      limit=10,
                                      offset=20)
        assert result == SearchResults(verses=[], total=10)
        service_one.search.assert_called_once_with(bible1,
                                                   ['one', 'two', 'three'],
                                                   limit=10,
                                                   offset=20)
예제 #8
0
    async def test_get_passage_timeout(
        self,
        bible1: Bible,
        service_one: MockService,
        service_two: MockService,
    ) -> None:
        async def get_passage(*args: Any, **kwargs: Any) -> None:
            await asyncio.sleep(0.5)

        manager = ServiceManager(
            {
                'ServiceOne': service_one,
                'ServiceTwo': service_two
            },
            timeout=0.1)
        service_one.get_passage.side_effect = get_passage

        with pytest.raises(ServiceLookupTimeout) as exc_info:
            await manager.get_passage(bible1,
                                      VerseRange.from_string('Genesis 1:2'))

        assert exc_info.value.bible == bible1
        assert exc_info.value.verses == VerseRange.from_string('Genesis 1:2')
예제 #9
0
    async def test_get_passage(
        self,
        config: Any,
        bible2: Bible,
        service_one: MockService,
        service_two: MockService,
    ) -> None:
        manager = ServiceManager({
            'ServiceOne': service_one,
            'ServiceTwo': service_two
        })
        service_one.get_passage.return_value = Passage(
            'blah', VerseRange.from_string('Genesis 2:2'))
        service_two.get_passage.return_value = Passage(
            'blah', VerseRange.from_string('Genesis 1:2'))

        result = await manager.get_passage(
            bible2, VerseRange.from_string('Genesis 1:2'))

        assert result == Passage('blah', VerseRange.from_string('Genesis 1:2'),
                                 'BIB2')
        service_two.get_passage.assert_called_once_with(
            bible2, VerseRange.from_string('Genesis 1:2'))