1 # SPDX-License-Identifier: GPL-2.0-only
 
   3 # This file is part of Nominatim. (https://nominatim.org)
 
   5 # Copyright (C) 2022 by the Nominatim developer community.
 
   6 # For a full list of authors see the git log.
 
   8 Tests for command line interface wrapper for refresk command.
 
  12 import nominatim.tools.refresh
 
  13 import nominatim.tools.postcodes
 
  14 import nominatim.indexer.indexer
 
  18     @pytest.fixture(autouse=True)
 
  19     def setup_cli_call(self, cli_call, temp_db, cli_tokenizer_mock):
 
  20         self.call_nominatim = cli_call
 
  21         self.tokenizer_mock = cli_tokenizer_mock
 
  24     @pytest.mark.parametrize("command,func", [
 
  25                              ('address-levels', 'load_address_levels_from_config'),
 
  26                              ('wiki-data', 'import_wikipedia_articles'),
 
  27                              ('importance', 'recompute_importance'),
 
  28                              ('website', 'setup_website'),
 
  30     def test_refresh_command(self, mock_func_factory, command, func):
 
  31         func_mock = mock_func_factory(nominatim.tools.refresh, func)
 
  33         assert self.call_nominatim('refresh', '--' + command) == 0
 
  34         assert func_mock.called == 1
 
  37     def test_refresh_word_count(self):
 
  38         assert self.call_nominatim('refresh', '--word-count') == 0
 
  39         assert self.tokenizer_mock.update_statistics_called
 
  42     def test_refresh_word_tokens(self):
 
  43         assert self.call_nominatim('refresh', '--word-tokens') == 0
 
  44         assert self.tokenizer_mock.update_word_tokens_called
 
  47     def test_refresh_postcodes(self, mock_func_factory, place_table):
 
  48         func_mock = mock_func_factory(nominatim.tools.postcodes, 'update_postcodes')
 
  49         idx_mock = mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_postcodes')
 
  51         assert self.call_nominatim('refresh', '--postcodes') == 0
 
  52         assert func_mock.called == 1
 
  53         assert idx_mock.called == 1
 
  56     def test_refresh_postcodes_no_place_table(self):
 
  57         # Do nothing without the place table
 
  58         assert self.call_nominatim('refresh', '--postcodes') == 0
 
  61     def test_refresh_create_functions(self, mock_func_factory):
 
  62         func_mock = mock_func_factory(nominatim.tools.refresh, 'create_functions')
 
  64         assert self.call_nominatim('refresh', '--functions') == 0
 
  65         assert func_mock.called == 1
 
  66         assert self.tokenizer_mock.update_sql_functions_called
 
  69     def test_refresh_wikidata_file_not_found(self, monkeypatch):
 
  70         monkeypatch.setenv('NOMINATIM_WIKIPEDIA_DATA_PATH', 'gjoiergjeroi345Q')
 
  72         assert self.call_nominatim('refresh', '--wiki-data') == 1
 
  75     def test_refresh_importance_computed_after_wiki_import(self, monkeypatch):
 
  77         monkeypatch.setattr(nominatim.tools.refresh, 'import_wikipedia_articles',
 
  78                             lambda *args, **kwargs: calls.append('import') or 0)
 
  79         monkeypatch.setattr(nominatim.tools.refresh, 'recompute_importance',
 
  80                             lambda *args, **kwargs: calls.append('update'))
 
  82         assert self.call_nominatim('refresh', '--importance', '--wiki-data') == 0
 
  84         assert calls == ['import', 'update']