]> git.openstreetmap.org Git - nominatim.git/commitdiff
generalize fixtures for cli tests
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 30 Nov 2021 13:07:39 +0000 (14:07 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 30 Nov 2021 13:07:39 +0000 (14:07 +0100)
test/python/cli/conftest.py
test/python/cli/test_cli.py
test/python/cli/test_cmd_replication.py
test/python/mocks.py

index 183696a97e4968b3e72f6e7257977e2bd0796672..2013b16f57fe96a5efc0f137b7a7cb58bdfb95d3 100644 (file)
@@ -2,6 +2,24 @@ import pytest
 
 import nominatim.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
+
+
+
 @pytest.fixture
 def cli_call(src_dir):
     """ Call the nominatim main function with the correct paths set.
@@ -19,3 +37,20 @@ def cli_call(src_dir):
 
     return _call_nominatim
 
+
+@pytest.fixture
+def mock_run_legacy(monkeypatch):
+    mock = MockParamCapture()
+    monkeypatch.setattr(nominatim.cli, 'run_legacy_script', mock)
+    return mock
+
+
+@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
index 7bc3fc0936bdecfa4c43d84cab59ecf00fb5018d..f4878b6186feaab16237a5169a528da074f5fb10 100644 (file)
@@ -24,26 +24,6 @@ import nominatim.tools.refresh
 import nominatim.tools.postcodes
 import nominatim.tokenizer.factory
 
-from mocks import MockParamCapture
-
-@pytest.fixture
-def mock_run_legacy(monkeypatch):
-    mock = MockParamCapture()
-    monkeypatch.setattr(nominatim.cli, 'run_legacy_script', mock)
-    return mock
-
-
-@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
-
-
 
 class TestCli:
 
index 8e47e96e208fce677c7e42fd611f6992d52a7336..6c8a0ef6ac33dfd7c931d6c53407e583590a885c 100644 (file)
@@ -11,8 +11,6 @@ import nominatim.indexer.indexer
 import nominatim.tools.replication
 from nominatim.db import status
 
-from mocks import MockParamCapture
-
 @pytest.fixture
 def tokenizer_mock(monkeypatch):
     class DummyTokenizer:
@@ -35,15 +33,6 @@ def tokenizer_mock(monkeypatch):
     return tok
 
 
-@pytest.fixture
-def mock_func_factory(monkeypatch):
-    def get_mock(module, func):
-        mock = MockParamCapture()
-        monkeypatch.setattr(module, func, mock)
-        return mock
-
-    return get_mock
-
 
 @pytest.fixture
 def init_status(temp_db_conn, status_table):
@@ -51,11 +40,8 @@ def init_status(temp_db_conn, status_table):
 
 
 @pytest.fixture
-def index_mock(monkeypatch, tokenizer_mock, init_status):
-    mock = MockParamCapture()
-    monkeypatch.setattr(nominatim.indexer.indexer.Indexer, 'index_full', mock)
-
-    return mock
+def index_mock(mock_func_factory, tokenizer_mock, init_status):
+    return mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_full')
 
 
 @pytest.fixture
@@ -69,6 +55,16 @@ class TestCliReplication:
     def setup_cli_call(self, cli_call, temp_db):
         self.call_nominatim = lambda *args: cli_call('replication', *args)
 
+
+    @pytest.fixture(autouse=True)
+    def setup_update_function(self, monkeypatch):
+        def _mock_updates(states):
+            monkeypatch.setattr(nominatim.tools.replication, 'update',
+                            lambda *args, **kwargs: states.pop())
+
+        self.update_states = _mock_updates
+
+
     @pytest.mark.parametrize("params,func", [
                              (('--init', '--no-update-functions'), 'init_replication'),
                              (('--check-for-updates',), 'check_for_updates')
@@ -107,11 +103,9 @@ class TestCliReplication:
 
 
     @pytest.mark.parametrize("update_interval", [60, 3600])
-    def test_replication_catchup(self, monkeypatch, index_mock, update_interval, placex_table):
+    def test_replication_catchup(self, placex_table, monkeypatch, index_mock, update_interval):
         monkeypatch.setenv('NOMINATIM_REPLICATION_UPDATE_INTERVAL', str(update_interval))
-        states = [nominatim.tools.replication.UpdateState.NO_CHANGES]
-        monkeypatch.setattr(nominatim.tools.replication, 'update',
-                            lambda *args, **kwargs: states.pop())
+        self.update_states([nominatim.tools.replication.UpdateState.NO_CHANGES])
 
         assert self.call_nominatim('--catch-up') == 0
 
@@ -122,11 +116,9 @@ class TestCliReplication:
         assert update_mock.last_args[1]['threads'] == 4
 
 
-    def test_replication_update_continuous(self, monkeypatch, index_mock):
-        states = [nominatim.tools.replication.UpdateState.UP_TO_DATE,
-                  nominatim.tools.replication.UpdateState.UP_TO_DATE]
-        monkeypatch.setattr(nominatim.tools.replication, 'update',
-                            lambda *args, **kwargs: states.pop())
+    def test_replication_update_continuous(self, index_mock):
+        self.update_states([nominatim.tools.replication.UpdateState.UP_TO_DATE,
+                            nominatim.tools.replication.UpdateState.UP_TO_DATE])
 
         with pytest.raises(IndexError):
             self.call_nominatim()
@@ -134,14 +126,12 @@ class TestCliReplication:
         assert index_mock.called == 2
 
 
-    def test_replication_update_continuous_no_change(self, monkeypatch, index_mock):
-        states = [nominatim.tools.replication.UpdateState.NO_CHANGES,
-                  nominatim.tools.replication.UpdateState.UP_TO_DATE]
-        monkeypatch.setattr(nominatim.tools.replication, 'update',
-                            lambda *args, **kwargs: states.pop())
+    def test_replication_update_continuous_no_change(self, mock_func_factory,
+                                                     index_mock):
+        self.update_states([nominatim.tools.replication.UpdateState.NO_CHANGES,
+                            nominatim.tools.replication.UpdateState.UP_TO_DATE])
 
-        sleep_mock = MockParamCapture()
-        monkeypatch.setattr(time, 'sleep', sleep_mock)
+        sleep_mock = mock_func_factory(time, 'sleep')
 
         with pytest.raises(IndexError):
             self.call_nominatim()
index 7f7aaafc45d49364fba3917da897793c7f607428..17b76052c6718c60f01370ac795e16106ce2772f 100644 (file)
@@ -10,23 +10,6 @@ from nominatim.db import properties
 # This must always point to the mock word table for the default tokenizer.
 from mock_legacy_word_table import MockLegacyWordTable as MockWordTable
 
-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 MockPlacexTable:
     """ A placex table for testing.
     """