2022-01-03 18:23:58 +03:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
#
|
|
|
|
# This file is part of Nominatim. (https://nominatim.org)
|
|
|
|
#
|
|
|
|
# Copyright (C) 2022 by the Nominatim developer community.
|
|
|
|
# For a full list of authors see the git log.
|
2021-12-03 01:45:48 +03:00
|
|
|
"""
|
|
|
|
Tests for command line interface wrapper for refresk command.
|
|
|
|
"""
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
import nominatim.tools.refresh
|
|
|
|
import nominatim.tools.postcodes
|
|
|
|
import nominatim.indexer.indexer
|
|
|
|
|
|
|
|
class TestRefresh:
|
|
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
|
|
def setup_cli_call(self, cli_call, temp_db, cli_tokenizer_mock):
|
|
|
|
self.call_nominatim = cli_call
|
|
|
|
self.tokenizer_mock = cli_tokenizer_mock
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("command,func", [
|
|
|
|
('address-levels', 'load_address_levels_from_config'),
|
|
|
|
('wiki-data', 'import_wikipedia_articles'),
|
|
|
|
('importance', 'recompute_importance'),
|
|
|
|
('website', 'setup_website'),
|
|
|
|
])
|
|
|
|
def test_refresh_command(self, mock_func_factory, command, func):
|
|
|
|
func_mock = mock_func_factory(nominatim.tools.refresh, func)
|
|
|
|
|
|
|
|
assert self.call_nominatim('refresh', '--' + command) == 0
|
2022-08-25 10:45:18 +03:00
|
|
|
assert func_mock.called == 1
|
2021-12-03 01:45:48 +03:00
|
|
|
|
|
|
|
|
|
|
|
def test_refresh_word_count(self):
|
|
|
|
assert self.call_nominatim('refresh', '--word-count') == 0
|
|
|
|
assert self.tokenizer_mock.update_statistics_called
|
|
|
|
|
|
|
|
|
2022-01-21 01:47:20 +03:00
|
|
|
def test_refresh_word_tokens(self):
|
|
|
|
assert self.call_nominatim('refresh', '--word-tokens') == 0
|
|
|
|
assert self.tokenizer_mock.update_word_tokens_called
|
|
|
|
|
|
|
|
|
2021-12-03 01:45:48 +03:00
|
|
|
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')
|
|
|
|
|
|
|
|
assert self.call_nominatim('refresh', '--postcodes') == 0
|
|
|
|
assert func_mock.called == 1
|
|
|
|
assert idx_mock.called == 1
|
|
|
|
|
|
|
|
|
|
|
|
def test_refresh_postcodes_no_place_table(self):
|
|
|
|
# Do nothing without the place table
|
|
|
|
assert self.call_nominatim('refresh', '--postcodes') == 0
|
|
|
|
|
|
|
|
|
|
|
|
def test_refresh_create_functions(self, mock_func_factory):
|
|
|
|
func_mock = mock_func_factory(nominatim.tools.refresh, 'create_functions')
|
|
|
|
|
|
|
|
assert self.call_nominatim('refresh', '--functions') == 0
|
|
|
|
assert func_mock.called == 1
|
|
|
|
assert self.tokenizer_mock.update_sql_functions_called
|
|
|
|
|
|
|
|
|
|
|
|
def test_refresh_wikidata_file_not_found(self, monkeypatch):
|
|
|
|
monkeypatch.setenv('NOMINATIM_WIKIPEDIA_DATA_PATH', 'gjoiergjeroi345Q')
|
|
|
|
|
|
|
|
assert self.call_nominatim('refresh', '--wiki-data') == 1
|
|
|
|
|
2022-09-28 18:41:16 +03:00
|
|
|
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.tools.refresh, 'import_secondary_importance'),
|
|
|
|
mock_func_factory(nominatim.tools.refresh, 'create_functions')]
|
|
|
|
|
|
|
|
assert self.call_nominatim('refresh', '--secondary-importance') == 0
|
|
|
|
assert mocks[0].called == 1
|
|
|
|
assert mocks[1].called == 1
|
|
|
|
|
2022-07-06 09:16:41 +03:00
|
|
|
|
2022-07-24 14:04:23 +03:00
|
|
|
def test_refresh_importance_computed_after_wiki_import(self, monkeypatch):
|
2021-12-03 01:45:48 +03:00
|
|
|
calls = []
|
|
|
|
monkeypatch.setattr(nominatim.tools.refresh, 'import_wikipedia_articles',
|
|
|
|
lambda *args, **kwargs: calls.append('import') or 0)
|
|
|
|
monkeypatch.setattr(nominatim.tools.refresh, 'recompute_importance',
|
|
|
|
lambda *args, **kwargs: calls.append('update'))
|
|
|
|
|
2022-07-24 14:04:23 +03:00
|
|
|
assert self.call_nominatim('refresh', '--importance', '--wiki-data') == 0
|
2021-12-03 01:45:48 +03:00
|
|
|
|
|
|
|
assert calls == ['import', 'update']
|
2022-04-14 15:52:13 +03:00
|
|
|
|
|
|
|
@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.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.tools.refresh, 'invalidate_osm_object')
|
|
|
|
|
|
|
|
self.call_nominatim('refresh', func, param) == 1
|
|
|
|
assert func_mock.called == 0
|