]> git.openstreetmap.org Git - nominatim.git/blobdiff - test/python/config/test_config.py
add documentation for sanitizer interface
[nominatim.git] / test / python / config / test_config.py
index a71324f9e4ac85eb7fc810b087693c37efb65044..a9cbb48dd0ed9fb7bee323998aaa3d0e19fc2109 100644 (file)
@@ -1,10 +1,16 @@
+# 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.
 """
 Test for loading dotenv configuration.
 """
 from pathlib import Path
 import pytest
 
 """
 Test for loading dotenv configuration.
 """
 from pathlib import Path
 import pytest
 
-from nominatim.config import Configuration
+from nominatim.config import Configuration, flatten_config_list
 from nominatim.errors import UsageError
 
 @pytest.fixture
 from nominatim.errors import UsageError
 
 @pytest.fixture
@@ -167,6 +173,23 @@ def test_get_int_empty(make_config):
         config.get_int('DATABASE_MODULE_PATH')
 
 
         config.get_int('DATABASE_MODULE_PATH')
 
 
+@pytest.mark.parametrize("value,outlist", [('sd', ['sd']),
+                                           ('dd,rr', ['dd', 'rr']),
+                                           (' a , b ', ['a', 'b'])])
+def test_get_str_list_success(make_config, monkeypatch, value, outlist):
+    config = make_config()
+
+    monkeypatch.setenv('NOMINATIM_MYLIST', value)
+
+    assert config.get_str_list('MYLIST') == outlist
+
+
+def test_get_str_list_empty(make_config):
+    config = make_config()
+
+    assert config.get_str_list('LANGUAGES') is None
+
+
 def test_get_path_empty(make_config):
     config = make_config()
 
 def test_get_path_empty(make_config):
     config = make_config()
 
@@ -306,11 +329,29 @@ def test_load_subconf_env_relative_not_found(make_config_path, monkeypatch):
         rules = config.load_sub_configuration('test.yaml', config='MY_CONFIG')
 
 
         rules = config.load_sub_configuration('test.yaml', config='MY_CONFIG')
 
 
+def test_load_subconf_json(make_config_path):
+    config = make_config_path()
+
+    (config.project_dir / 'test.json').write_text('{"cow": "muh", "cat": "miau"}')
+
+    rules = config.load_sub_configuration('test.json')
+
+    assert rules == dict(cow='muh', cat='miau')
+
 def test_load_subconf_not_found(make_config_path):
     config = make_config_path()
 
     with pytest.raises(UsageError, match='Config file not found.'):
 def test_load_subconf_not_found(make_config_path):
     config = make_config_path()
 
     with pytest.raises(UsageError, match='Config file not found.'):
-        rules = config.load_sub_configuration('test.yaml')
+        config.load_sub_configuration('test.yaml')
+
+
+def test_load_subconf_env_unknown_format(make_config_path):
+    config = make_config_path()
+
+    (config.project_dir / 'test.xml').write_text('<html></html>')
+
+    with pytest.raises(UsageError, match='unknown format'):
+        config.load_sub_configuration('test.xml')
 
 
 def test_load_subconf_include_absolute(make_config_path, tmp_path):
 
 
 def test_load_subconf_include_absolute(make_config_path, tmp_path):
@@ -370,3 +411,30 @@ def test_load_subconf_include_recursive(make_config_path):
     rules = config.load_sub_configuration('test.yaml')
 
     assert rules == dict(base=[['the end'], 'upper'])
     rules = config.load_sub_configuration('test.yaml')
 
     assert rules == dict(base=[['the end'], 'upper'])
+
+
+@pytest.mark.parametrize("content", [[], None])
+def test_flatten_config_list_empty(content):
+    assert flatten_config_list(content) == []
+
+
+@pytest.mark.parametrize("content", [{'foo': 'bar'}, 'hello world', 3])
+def test_flatten_config_list_no_list(content):
+    with pytest.raises(UsageError):
+        flatten_config_list(content)
+
+
+def test_flatten_config_list_allready_flat():
+    assert flatten_config_list([1, 2, 456]) == [1, 2, 456]
+
+
+def test_flatten_config_list_nested():
+    content = [
+        34,
+        [{'first': '1st', 'second': '2nd'}, {}],
+        [[2, 3], [45, [56, 78], 66]],
+        'end'
+    ]
+    assert flatten_config_list(content) == \
+               [34, {'first': '1st', 'second': '2nd'}, {},
+                2, 3, 45, 56, 78, 66, 'end']