1 # SPDX-License-Identifier: GPL-3.0-or-later
 
   3 # This file is part of Nominatim. (https://nominatim.org)
 
   5 # Copyright (C) 2025 by the Nominatim developer community.
 
   6 # For a full list of authors see the git log.
 
   9 import nominatim_db.cli
 
  12 class MockParamCapture:
 
  13     """ Mock that records the parameters with which a function was called
 
  14         as well as the number of calls.
 
  16     def __init__(self, retval=0):
 
  18         self.return_value = retval
 
  20         self.last_kwargs = None
 
  22     def __call__(self, *args, **kwargs):
 
  25         self.last_kwargs = kwargs
 
  26         return self.return_value
 
  29 class AsyncMockParamCapture:
 
  30     """ Mock that records the parameters with which a function was called
 
  31         as well as the number of calls.
 
  33     def __init__(self, retval=0):
 
  35         self.return_value = retval
 
  37         self.last_kwargs = None
 
  39     async def __call__(self, *args, **kwargs):
 
  42         self.last_kwargs = kwargs
 
  43         return self.return_value
 
  47     def __init__(self, *args, **kwargs):
 
  48         self.update_sql_functions_called = False
 
  49         self.finalize_import_called = False
 
  50         self.update_statistics_called = False
 
  51         self.update_word_tokens_called = False
 
  53     def update_sql_functions(self, *args, **kwargs):
 
  54         self.update_sql_functions_called = True
 
  56     def finalize_import(self, *args, **kwargs):
 
  57         self.finalize_import_called = True
 
  59     def update_statistics(self, *args, **kwargs):
 
  60         self.update_statistics_called = True
 
  62     def update_word_tokens(self, *args, **kwargs):
 
  63         self.update_word_tokens_called = True
 
  68     """ Call the nominatim main function with the correct paths set.
 
  69         Returns a function that can be called with the desired CLI arguments.
 
  71     def _call_nominatim(*args):
 
  72         return nominatim_db.cli.nominatim(cli_args=args)
 
  74     return _call_nominatim
 
  78 def mock_func_factory(monkeypatch):
 
  79     def get_mock(module, func):
 
  80         mock = MockParamCapture()
 
  82         monkeypatch.setattr(module, func, mock)
 
  89 def async_mock_func_factory(monkeypatch):
 
  90     def get_mock(module, func):
 
  91         mock = AsyncMockParamCapture()
 
  93         monkeypatch.setattr(module, func, mock)
 
 100 def cli_tokenizer_mock(monkeypatch):
 
 101     tok = DummyTokenizer()
 
 102     monkeypatch.setattr(nominatim_db.tokenizer.factory, 'get_tokenizer_for_db',
 
 104     monkeypatch.setattr(nominatim_db.tokenizer.factory, 'create_tokenizer',