]> git.openstreetmap.org Git - nominatim.git/blobdiff - test/python/cli/test_cmd_refresh.py
Merge pull request #3499 from mtmail/add-data-warn-if-frozen
[nominatim.git] / test / python / cli / test_cmd_refresh.py
index 18cc805a4ef8dda535ff2c66e85957586816488a..9074b2cc3d44ae4434f68fdef8ecaf778366468c 100644 (file)
@@ -1,11 +1,17 @@
+# 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.
 """
 Tests for command line interface wrapper for refresk command.
 """
 import pytest
 
 """
 Tests for command line interface wrapper for refresk command.
 """
 import pytest
 
-import nominatim.tools.refresh
-import nominatim.tools.postcodes
-import nominatim.indexer.indexer
+import nominatim_db.tools.refresh
+import nominatim_db.tools.postcodes
+import nominatim_db.indexer.indexer
 
 class TestRefresh:
 
 
 class TestRefresh:
 
@@ -22,7 +28,8 @@ class TestRefresh:
                              ('website', 'setup_website'),
                              ])
     def test_refresh_command(self, mock_func_factory, command, func):
                              ('website', 'setup_website'),
                              ])
     def test_refresh_command(self, mock_func_factory, command, func):
-        func_mock = mock_func_factory(nominatim.tools.refresh, func)
+        mock_func_factory(nominatim_db.tools.refresh, 'create_functions')
+        func_mock = mock_func_factory(nominatim_db.tools.refresh, func)
 
         assert self.call_nominatim('refresh', '--' + command) == 0
         assert func_mock.called == 1
 
         assert self.call_nominatim('refresh', '--' + command) == 0
         assert func_mock.called == 1
@@ -33,9 +40,14 @@ class TestRefresh:
         assert self.tokenizer_mock.update_statistics_called
 
 
         assert self.tokenizer_mock.update_statistics_called
 
 
-    def test_refresh_postcodes(self, mock_func_factory, place_table):
-        func_mock = mock_func_factory(nominatim.tools.postcodes, 'update_postcodes')
-        idx_mock = mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_postcodes')
+    def test_refresh_word_tokens(self):
+        assert self.call_nominatim('refresh', '--word-tokens') == 0
+        assert self.tokenizer_mock.update_word_tokens_called
+
+
+    def test_refresh_postcodes(self, async_mock_func_factory, mock_func_factory, place_table):
+        func_mock = mock_func_factory(nominatim_db.tools.postcodes, 'update_postcodes')
+        idx_mock = async_mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_postcodes')
 
         assert self.call_nominatim('refresh', '--postcodes') == 0
         assert func_mock.called == 1
 
         assert self.call_nominatim('refresh', '--postcodes') == 0
         assert func_mock.called == 1
@@ -48,7 +60,7 @@ class TestRefresh:
 
 
     def test_refresh_create_functions(self, mock_func_factory):
 
 
     def test_refresh_create_functions(self, mock_func_factory):
-        func_mock = mock_func_factory(nominatim.tools.refresh, 'create_functions')
+        func_mock = mock_func_factory(nominatim_db.tools.refresh, 'create_functions')
 
         assert self.call_nominatim('refresh', '--functions') == 0
         assert func_mock.called == 1
 
         assert self.call_nominatim('refresh', '--functions') == 0
         assert func_mock.called == 1
@@ -61,13 +73,49 @@ class TestRefresh:
         assert self.call_nominatim('refresh', '--wiki-data') == 1
 
 
         assert self.call_nominatim('refresh', '--wiki-data') == 1
 
 
-    def test_refresh_importance_computed_after_wiki_import(self, monkeypatch):
+    def test_refresh_secondary_importance_file_not_found(self):
+        assert self.call_nominatim('refresh', '--secondary-importance') == 1
+
+
+    def test_refresh_secondary_importance_new_table(self, mock_func_factory):
+        mocks = [mock_func_factory(nominatim_db.tools.refresh, 'import_secondary_importance'),
+                 mock_func_factory(nominatim_db.tools.refresh, 'create_functions')]
+
+        assert self.call_nominatim('refresh', '--secondary-importance') == 0
+        assert mocks[0].called == 1
+        assert mocks[1].called == 1
+
+
+    def test_refresh_importance_computed_after_wiki_import(self, monkeypatch, mock_func_factory):
         calls = []
         calls = []
-        monkeypatch.setattr(nominatim.tools.refresh, 'import_wikipedia_articles',
+        monkeypatch.setattr(nominatim_db.tools.refresh, 'import_wikipedia_articles',
                             lambda *args, **kwargs: calls.append('import') or 0)
                             lambda *args, **kwargs: calls.append('import') or 0)
-        monkeypatch.setattr(nominatim.tools.refresh, 'recompute_importance',
+        monkeypatch.setattr(nominatim_db.tools.refresh, 'recompute_importance',
                             lambda *args, **kwargs: calls.append('update'))
                             lambda *args, **kwargs: calls.append('update'))
+        func_mock = mock_func_factory(nominatim_db.tools.refresh, 'create_functions')
 
         assert self.call_nominatim('refresh', '--importance', '--wiki-data') == 0
 
         assert calls == ['import', 'update']
 
         assert self.call_nominatim('refresh', '--importance', '--wiki-data') == 0
 
         assert calls == ['import', 'update']
+        assert func_mock.called == 1
+
+    @pytest.mark.parametrize('params', [('--data-object', 'w234'),
+                                        ('--data-object', 'N23', '--data-object', 'N24'),
+                                        ('--data-area', 'R7723'),
+                                        ('--data-area', 'r7723', '--data-area', 'r2'),
+                                        ('--data-area', 'R9284425', '--data-object', 'n1234567894567')])
+    def test_refresh_objects(self, params, mock_func_factory):
+        func_mock = mock_func_factory(nominatim_db.tools.refresh, 'invalidate_osm_object')
+
+        assert self.call_nominatim('refresh', *params) == 0
+
+        assert func_mock.called == len(params)/2
+
+
+    @pytest.mark.parametrize('func', ('--data-object', '--data-area'))
+    @pytest.mark.parametrize('param', ('234', 'a55', 'R 453', 'Rel'))
+    def test_refresh_objects_bad_param(self, func, param, mock_func_factory):
+        func_mock = mock_func_factory(nominatim_db.tools.refresh, 'invalidate_osm_object')
+
+        self.call_nominatim('refresh', func, param) == 1
+        assert func_mock.called == 0