]> git.openstreetmap.org Git - nominatim.git/blobdiff - test/python/tools/test_country_info.py
add tests for discarding bad postcodes
[nominatim.git] / test / python / tools / test_country_info.py
index 63142d2643d23982b3ba240b176a84d013f1a867..3f00d54e1706d5003623164bb01e2e3065e4881c 100644 (file)
@@ -7,20 +7,30 @@
 """
 Tests for function that handle country properties.
 """
 """
 Tests for function that handle country properties.
 """
-
+from textwrap import dedent
 import pytest
 
 from nominatim.tools import country_info
 
 import pytest
 
 from nominatim.tools import country_info
 
-
-def read_config(def_config):
+@pytest.fixture
+def loaded_country(def_config):
     country_info.setup_country_config(def_config)
 
 
     country_info.setup_country_config(def_config)
 
 
+@pytest.fixture
+def env_with_country_config(project_env):
+
+    def _mk_config(cfg):
+        (project_env.project_dir / 'country_settings.yaml').write_text(dedent(cfg))
+
+        return project_env
+
+    return _mk_config
+
+
 @pytest.mark.parametrize("no_partitions", (True, False))
 def test_setup_country_tables(src_dir, temp_db_with_extensions, dsn, temp_db_cursor,
 @pytest.mark.parametrize("no_partitions", (True, False))
 def test_setup_country_tables(src_dir, temp_db_with_extensions, dsn, temp_db_cursor,
-                              def_config, no_partitions):
-    read_config(def_config)
+                              loaded_country, no_partitions):
     country_info.setup_country_tables(dsn, src_dir / 'data', no_partitions)
 
     assert temp_db_cursor.table_exists('country_name')
     country_info.setup_country_tables(dsn, src_dir / 'data', no_partitions)
 
     assert temp_db_cursor.table_exists('country_name')
@@ -39,10 +49,9 @@ def test_setup_country_tables(src_dir, temp_db_with_extensions, dsn, temp_db_cur
     assert temp_db_cursor.table_rows('country_osm_grid') > 100
 
 
     assert temp_db_cursor.table_rows('country_osm_grid') > 100
 
 
-@pytest.mark.parametrize("languages", (None, ' fr,en'))
+@pytest.mark.parametrize("languages", (None, ['fr', 'en']))
 def test_create_country_names(temp_db_with_extensions, temp_db_conn, temp_db_cursor,
 def test_create_country_names(temp_db_with_extensions, temp_db_conn, temp_db_cursor,
-                              table_factory, tokenizer_mock, languages, def_config):
-    read_config(def_config)
+                              table_factory, tokenizer_mock, languages, loaded_country):
 
     table_factory('country_name', 'country_code varchar(2), name hstore',
                   content=(('us', '"name"=>"us1","name:af"=>"us2"'),
 
     table_factory('country_name', 'country_code varchar(2), name hstore',
                   content=(('us', '"name"=>"us1","name:af"=>"us2"'),
@@ -60,62 +69,103 @@ def test_create_country_names(temp_db_with_extensions, temp_db_conn, temp_db_cur
                   for k, v in tokenizer.analyser_cache['countries']}
 
     if languages:
                   for k, v in tokenizer.analyser_cache['countries']}
 
     if languages:
-        assert result_set == {'us': set(('us', 'us1', 'United States')),
+        assert result_set == {'us': set(('us', 'us1')),
                               'fr': set(('fr', 'Fra', 'Fren'))}
     else:
                               'fr': set(('fr', 'Fra', 'Fren'))}
     else:
-        assert result_set == {'us': set(('us', 'us1', 'us2', 'United States')),
+        assert result_set == {'us': set(('us', 'us1', 'us2')),
                               'fr': set(('fr', 'Fra', 'Fren'))}
 
 
                               'fr': set(('fr', 'Fra', 'Fren'))}
 
 
-def test_setup_country_config_languages_not_loaded(project_env):
-    (project_env.project_dir / 'country_settings.yaml').write_text("""
-de:
-    partition: 3
-    names:
-        name:
-            default: Deutschland
-""")
-    country_info._COUNTRY_INFO._info = None
-    country_info.setup_country_config(project_env)
-    assert country_info._COUNTRY_INFO._info == {'de': {'partition': 3,
-                                                       'languages': [], 'names': {'name': {'default': 'Deutschland'}}}}
-
-
-def test_setup_country_config_name_not_loaded(project_env):
-    (project_env.project_dir / 'country_settings.yaml').write_text("""
-de:
-    partition: 3
-    languages: de
-    names:
-""")
-    country_info._COUNTRY_INFO._info = None
-    country_info.setup_country_config(project_env)
-    assert country_info._COUNTRY_INFO._info == {'de': {'partition': 3,
-                                                       'languages': ['de'], 'names': {'name': {}}}}
-
-
-def test_setup_country_config_names_not_loaded(project_env):
-    (project_env.project_dir / 'country_settings.yaml').write_text("""
-de:
-    partition: 3
-    languages: de
-""")
-    country_info._COUNTRY_INFO._info = None
-    country_info.setup_country_config(project_env)
-    assert country_info._COUNTRY_INFO._info == {'de': {'partition': 3,
-                                                       'languages': ['de'], 'names': {'name': {}}}}
-
-
-def test_setup_country_config_special_character(project_env):
-    (project_env.project_dir / 'country_settings.yaml').write_text("""
-bq:
-    partition: 250
-    languages: nl
-    names: 
-        name: 
-            default: "\\N"
-""")
-    country_info._COUNTRY_INFO._info = None
-    country_info.setup_country_config(project_env)
-    assert country_info._COUNTRY_INFO._info == {'bq': {'partition': 250,
-                                                       'languages': ['nl'], 'names': {'name': {'default': '\x85'}}}}
+def test_setup_country_names_prefixes(env_with_country_config):
+    config = env_with_country_config("""\
+                                     es:
+                                       names:
+                                         name:
+                                           en: Spain
+                                           de: Spanien
+                                           default: Espagñe
+                                     us:
+                                       names:
+                                         short_name:
+                                           default: USA
+                                         name:
+                                           default: United States
+                                           en: United States
+                                     """)
+    info = country_info._CountryInfo()
+    info.load(config)
+
+    assert info.get('es')['names'] == {"name": "Espagñe",
+                                       "name:en": "Spain",
+                                       "name:de": "Spanien"}
+    assert info.get('us')['names'] == {"name": "United States",
+                                       "name:en": "United States",
+                                       "short_name": "USA"}
+    assert 'names' not in info.get('xx')
+
+
+def test_setup_country_config_languages_not_loaded(env_with_country_config):
+    config = env_with_country_config("""\
+                                     de:
+                                         partition: 3
+                                         names:
+                                             name:
+                                                 default: Deutschland
+                                     """)
+    info = country_info._CountryInfo()
+    info.load(config)
+    assert dict(info.items()) == {'de': {'partition': 3,
+                                  'languages': [],
+                                  'names': {'name': 'Deutschland'}}}
+
+
+def test_setup_country_config_name_not_loaded(env_with_country_config):
+    config = env_with_country_config("""\
+                                     de:
+                                         partition: 3
+                                         languages: de
+                                         names:
+                                     """)
+
+    info = country_info._CountryInfo()
+    info.load(config)
+
+    assert dict(info.items()) == {'de': {'partition': 3,
+                                         'languages': ['de'],
+                                         'names': {}
+                                 }}
+
+
+def test_setup_country_config_names_not_loaded(env_with_country_config):
+    config = env_with_country_config("""
+                                     de:
+                                         partition: 3
+                                         languages: de
+                                     """)
+
+    info = country_info._CountryInfo()
+    info.load(config)
+
+    assert dict(info.items()) == {'de': {'partition': 3,
+                                         'languages': ['de'],
+                                         'names': {}
+                                 }}
+
+
+def test_setup_country_config_special_character(env_with_country_config):
+    config = env_with_country_config("""
+                                     bq:
+                                         partition: 250
+                                         languages: nl
+                                         names: 
+                                             name: 
+                                                 default: "\\N"
+                                     """)
+
+    info = country_info._CountryInfo()
+    info.load(config)
+
+    assert dict(info.items()) == {'bq': {'partition': 250,
+                                         'languages': ['nl'],
+                                         'names': {'name': '\x85'}
+                                 }}