X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/54d35ddfe9054f3bc49896fc47c2a02b3fc43066..d77aa7dfc9541bffa0109da89b95f296e751aea0:/test/python/cli/conftest.py diff --git a/test/python/cli/conftest.py b/test/python/cli/conftest.py index ebf0cf0c..84f2d659 100644 --- a/test/python/cli/conftest.py +++ b/test/python/cli/conftest.py @@ -1,6 +1,12 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# +# This file is part of Nominatim. (https://nominatim.org) +# +# Copyright (C) 2024 by the Nominatim developer community. +# For a full list of authors see the git log. import pytest -import nominatim.cli +import nominatim_db.cli class MockParamCapture: """ Mock that records the parameters with which a function was called @@ -19,51 +25,70 @@ class MockParamCapture: return self.return_value +class AsyncMockParamCapture: + """ Mock that records the parameters with which a function was called + as well as the number of calls. + """ + def __init__(self, retval=0): + self.called = 0 + self.return_value = retval + self.last_args = None + self.last_kwargs = None + + async def __call__(self, *args, **kwargs): + self.called += 1 + self.last_args = args + self.last_kwargs = kwargs + return self.return_value + + class DummyTokenizer: def __init__(self, *args, **kwargs): self.update_sql_functions_called = False self.finalize_import_called = False self.update_statistics_called = False + self.update_word_tokens_called = False - def update_sql_functions(self, *args): + def update_sql_functions(self, *args, **kwargs): self.update_sql_functions_called = True - def finalize_import(self, *args): + def finalize_import(self, *args, **kwargs): self.finalize_import_called = True - def update_statistics(self): + def update_statistics(self, *args, **kwargs): self.update_statistics_called = True + def update_word_tokens(self, *args, **kwargs): + self.update_word_tokens_called = True + @pytest.fixture -def cli_call(src_dir): +def cli_call(): """ Call the nominatim main function with the correct paths set. Returns a function that can be called with the desired CLI arguments. """ def _call_nominatim(*args): - return nominatim.cli.nominatim(module_dir='MODULE NOT AVAILABLE', - osm2pgsql_path='OSM2PGSQL NOT AVAILABLE', - phplib_dir=str(src_dir / 'lib-php'), - data_dir=str(src_dir / 'data'), - phpcgi_path='/usr/bin/php-cgi', - sqllib_dir=str(src_dir / 'lib-sql'), - config_dir=str(src_dir / 'settings'), - cli_args=args) + return nominatim_db.cli.nominatim(osm2pgsql_path='OSM2PGSQL NOT AVAILABLE', + cli_args=args) return _call_nominatim @pytest.fixture -def mock_run_legacy(monkeypatch): - mock = MockParamCapture() - monkeypatch.setattr(nominatim.cli, 'run_legacy_script', mock) - return mock +def mock_func_factory(monkeypatch): + def get_mock(module, func): + mock = MockParamCapture() + mock.func_name = func + monkeypatch.setattr(module, func, mock) + return mock + + return get_mock @pytest.fixture -def mock_func_factory(monkeypatch): +def async_mock_func_factory(monkeypatch): def get_mock(module, func): - mock = MockParamCapture() + mock = AsyncMockParamCapture() mock.func_name = func monkeypatch.setattr(module, func, mock) return mock @@ -74,9 +99,9 @@ def mock_func_factory(monkeypatch): @pytest.fixture def cli_tokenizer_mock(monkeypatch): tok = DummyTokenizer() - monkeypatch.setattr(nominatim.tokenizer.factory, 'get_tokenizer_for_db', + monkeypatch.setattr(nominatim_db.tokenizer.factory, 'get_tokenizer_for_db', lambda *args: tok) - monkeypatch.setattr(nominatim.tokenizer.factory, 'create_tokenizer', + monkeypatch.setattr(nominatim_db.tokenizer.factory, 'create_tokenizer', lambda *args: tok) return tok