]> git.openstreetmap.org Git - nominatim.git/blob - test/python/cli/conftest.py
d5ade22350a9a7764bfd26678fd1b97d559f22bf
[nominatim.git] / test / python / cli / conftest.py
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2024 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 import pytest
8
9 import nominatim_db.cli
10
11 class MockParamCapture:
12     """ Mock that records the parameters with which a function was called
13         as well as the number of calls.
14     """
15     def __init__(self, retval=0):
16         self.called = 0
17         self.return_value = retval
18         self.last_args = None
19         self.last_kwargs = None
20
21     def __call__(self, *args, **kwargs):
22         self.called += 1
23         self.last_args = args
24         self.last_kwargs = kwargs
25         return self.return_value
26
27
28 class AsyncMockParamCapture:
29     """ Mock that records the parameters with which a function was called
30         as well as the number of calls.
31     """
32     def __init__(self, retval=0):
33         self.called = 0
34         self.return_value = retval
35         self.last_args = None
36         self.last_kwargs = None
37
38     async def __call__(self, *args, **kwargs):
39         self.called += 1
40         self.last_args = args
41         self.last_kwargs = kwargs
42         return self.return_value
43
44
45 class DummyTokenizer:
46     def __init__(self, *args, **kwargs):
47         self.update_sql_functions_called = False
48         self.finalize_import_called = False
49         self.update_statistics_called = False
50         self.update_word_tokens_called = False
51
52     def update_sql_functions(self, *args, **kwargs):
53         self.update_sql_functions_called = True
54
55     def finalize_import(self, *args, **kwargs):
56         self.finalize_import_called = True
57
58     def update_statistics(self, *args, **kwargs):
59         self.update_statistics_called = True
60
61     def update_word_tokens(self, *args, **kwargs):
62         self.update_word_tokens_called = True
63
64
65 @pytest.fixture
66 def cli_call():
67     """ Call the nominatim main function with the correct paths set.
68         Returns a function that can be called with the desired CLI arguments.
69     """
70     def _call_nominatim(*args):
71         return nominatim_db.cli.nominatim(module_dir='MODULE NOT AVAILABLE',
72                                           osm2pgsql_path='OSM2PGSQL NOT AVAILABLE',
73                                           cli_args=args)
74
75     return _call_nominatim
76
77
78 @pytest.fixture
79 def mock_func_factory(monkeypatch):
80     def get_mock(module, func):
81         mock = MockParamCapture()
82         mock.func_name = func
83         monkeypatch.setattr(module, func, mock)
84         return mock
85
86     return get_mock
87
88
89 @pytest.fixture
90 def async_mock_func_factory(monkeypatch):
91     def get_mock(module, func):
92         mock = AsyncMockParamCapture()
93         mock.func_name = func
94         monkeypatch.setattr(module, func, mock)
95         return mock
96
97     return get_mock
98
99
100 @pytest.fixture
101 def cli_tokenizer_mock(monkeypatch):
102     tok = DummyTokenizer()
103     monkeypatch.setattr(nominatim_db.tokenizer.factory, 'get_tokenizer_for_db',
104                         lambda *args: tok)
105     monkeypatch.setattr(nominatim_db.tokenizer.factory, 'create_tokenizer',
106                         lambda *args: tok)
107
108     return tok