forked from hans/Nominatim
With the internal osm2pgsql gone, configuration of the binary location via settings is the only option left that makes sense.
108 lines
2.9 KiB
Python
108 lines
2.9 KiB
Python
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
# This file is part of Nominatim. (https://nominatim.org)
|
|
#
|
|
# Copyright (C) 2025 by the Nominatim developer community.
|
|
# For a full list of authors see the git log.
|
|
import pytest
|
|
|
|
import nominatim_db.cli
|
|
|
|
|
|
class MockParamCapture:
|
|
""" 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
|
|
|
|
def __call__(self, *args, **kwargs):
|
|
self.called += 1
|
|
self.last_args = args
|
|
self.last_kwargs = kwargs
|
|
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, **kwargs):
|
|
self.update_sql_functions_called = True
|
|
|
|
def finalize_import(self, *args, **kwargs):
|
|
self.finalize_import_called = True
|
|
|
|
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():
|
|
""" 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_db.cli.nominatim(cli_args=args)
|
|
|
|
return _call_nominatim
|
|
|
|
|
|
@pytest.fixture
|
|
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 async_mock_func_factory(monkeypatch):
|
|
def get_mock(module, func):
|
|
mock = AsyncMockParamCapture()
|
|
mock.func_name = func
|
|
monkeypatch.setattr(module, func, mock)
|
|
return mock
|
|
|
|
return get_mock
|
|
|
|
|
|
@pytest.fixture
|
|
def cli_tokenizer_mock(monkeypatch):
|
|
tok = DummyTokenizer()
|
|
monkeypatch.setattr(nominatim_db.tokenizer.factory, 'get_tokenizer_for_db',
|
|
lambda *args: tok)
|
|
monkeypatch.setattr(nominatim_db.tokenizer.factory, 'create_tokenizer',
|
|
lambda *args: tok)
|
|
|
|
return tok
|