X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/c06a1d007a4e67ab5caf5bf63d351f83e4e54ab6..109af0ef1c55421a166fd2d45586d04fe7f6f969:/test/python/test_tools_import_special_phrases.py?ds=sidebyside diff --git a/test/python/test_tools_import_special_phrases.py b/test/python/test_tools_import_special_phrases.py index fe996a61..7c3d0646 100644 --- a/test/python/test_tools_import_special_phrases.py +++ b/test/python/test_tools_import_special_phrases.py @@ -2,19 +2,43 @@ Tests for import special phrases methods of the class SPImporter. """ -from nominatim.errors import UsageError -from pathlib import Path -import tempfile from shutil import copyfile import pytest from nominatim.tools.special_phrases.sp_importer import SPImporter from nominatim.tools.special_phrases.sp_wiki_loader import SPWikiLoader -from nominatim.tools.special_phrases.sp_csv_loader import SPCsvLoader from nominatim.tools.special_phrases.special_phrase import SpecialPhrase +from nominatim.errors import UsageError from cursor import CursorForTesting -TEST_BASE_DIR = Path(__file__) / '..' / '..' +@pytest.fixture +def testfile_dir(src_dir): + return src_dir / 'test' / 'testfiles' + + +@pytest.fixture +def sp_importer(temp_db_conn, def_config): + """ + Return an instance of SPImporter. + """ + loader = SPWikiLoader(def_config, ['en']) + return SPImporter(def_config, temp_db_conn, loader) + + +@pytest.fixture +def xml_wiki_content(src_dir): + """ + return the content of the static xml test file. + """ + xml_test_content = src_dir / 'test' / 'testdata' / 'special_phrases_test_content.txt' + return xml_test_content.read_text() + + +@pytest.fixture +def default_phrases(table_factory): + table_factory('place_classtype_testclasstypetable_to_delete') + table_factory('place_classtype_testclasstypetable_to_keep') + def test_fetch_existing_place_classtype_tables(sp_importer, table_factory): """ @@ -48,50 +72,6 @@ def test_load_white_and_black_lists(sp_importer): assert isinstance(black_list, dict) and isinstance(white_list, dict) -def test_convert_php_settings(sp_importer): - """ - Test that _convert_php_settings_if_needed() convert the given - php file to a json file. - """ - php_file = (TEST_BASE_DIR / 'testfiles' / 'phrase_settings.php').resolve() - - with tempfile.TemporaryDirectory() as temp_dir: - temp_settings = (Path(temp_dir) / 'phrase_settings.php').resolve() - copyfile(php_file, temp_settings) - sp_importer._convert_php_settings_if_needed(temp_settings) - - assert (Path(temp_dir) / 'phrase_settings.json').is_file() - -def test_convert_settings_wrong_file(sp_importer): - """ - Test that _convert_php_settings_if_needed() raise an exception - if the given file is not a valid file. - """ - with pytest.raises(UsageError, match='random_file is not a valid file.'): - sp_importer._convert_php_settings_if_needed('random_file') - -def test_convert_settings_json_already_exist(sp_importer): - """ - Test that if we give to '_convert_php_settings_if_needed' a php file path - and that a the corresponding json file already exists, it is returned. - """ - php_file = (TEST_BASE_DIR / 'testfiles' / 'phrase_settings.php').resolve() - json_file = (TEST_BASE_DIR / 'testfiles' / 'phrase_settings.json').resolve() - - returned = sp_importer._convert_php_settings_if_needed(php_file) - - assert returned == json_file - -def test_convert_settings_giving_json(sp_importer): - """ - Test that if we give to '_convert_php_settings_if_needed' a json file path - the same path is directly returned - """ - json_file = (TEST_BASE_DIR / 'testfiles' / 'phrase_settings.json').resolve() - - returned = sp_importer._convert_php_settings_if_needed(json_file) - - assert returned == json_file def test_create_place_classtype_indexes(temp_db_with_extensions, temp_db_conn, table_factory, sp_importer): @@ -186,7 +166,8 @@ def test_remove_non_existent_tables_from_db(sp_importer, default_phrases, @pytest.mark.parametrize("should_replace", [(True), (False)]) def test_import_phrases(monkeypatch, temp_db_conn, def_config, sp_importer, - placex_table, table_factory, tokenizer_mock, should_replace): + placex_table, table_factory, tokenizer_mock, + xml_wiki_content, should_replace): """ Check that the main import_phrases() method is well executed. It should create the place_classtype table, the place_id and centroid indexes, @@ -200,7 +181,7 @@ def test_import_phrases(monkeypatch, temp_db_conn, def_config, sp_importer, table_factory('place_classtype_wrongclass_wrongtype') monkeypatch.setattr('nominatim.tools.special_phrases.sp_wiki_loader.SPWikiLoader._get_wiki_content', - mock_get_wiki_content) + lambda self, lang: xml_wiki_content) tokenizer = tokenizer_mock() sp_importer.import_phrases(tokenizer, should_replace) @@ -221,22 +202,6 @@ def test_import_phrases(monkeypatch, temp_db_conn, def_config, sp_importer, if should_replace: assert not temp_db_conn.table_exists('place_classtype_wrongclass_wrongtype') - -def mock_get_wiki_content(self, lang): - """ - Mock the _get_wiki_content() method to return - static xml test file content. - """ - return get_test_xml_wiki_content() - -def get_test_xml_wiki_content(): - """ - return the content of the static xml test file. - """ - xml_test_content_path = (TEST_BASE_DIR / 'testdata' / 'special_phrases_test_content.txt').resolve() - with open(xml_test_content_path) as xml_content_reader: - return xml_content_reader.read() - def check_table_exist(temp_db_conn, phrase_class, phrase_type): """ Verify that the place_classtype table exists for the given @@ -272,31 +237,3 @@ def check_placeid_and_centroid_indexes(temp_db_conn, phrase_class, phrase_type): and temp_db_conn.index_exists(index_prefix + 'place_id') ) - -@pytest.fixture -def sp_importer(temp_db_conn, def_config, temp_phplib_dir_with_migration): - """ - Return an instance of SPImporter. - """ - loader = SPWikiLoader(def_config, ['en']) - return SPImporter(def_config, temp_phplib_dir_with_migration, temp_db_conn, loader) - -@pytest.fixture -def temp_phplib_dir_with_migration(): - """ - Return temporary phpdir with migration subdirectory and - PhraseSettingsToJson.php script inside. - """ - migration_file = (TEST_BASE_DIR / '..' / 'lib-php' / 'migration' - / 'PhraseSettingsToJson.php').resolve() - with tempfile.TemporaryDirectory() as phpdir: - (Path(phpdir) / 'migration').mkdir() - migration_dest_path = (Path(phpdir) / 'migration' / 'PhraseSettingsToJson.php').resolve() - copyfile(migration_file, migration_dest_path) - - yield Path(phpdir) - -@pytest.fixture -def default_phrases(table_factory): - table_factory('place_classtype_testclasstypetable_to_delete') - table_factory('place_classtype_testclasstypetable_to_keep')