]> git.openstreetmap.org Git - nominatim.git/blobdiff - test/python/tools/test_sp_csv_loader.py
fail if osm2pgsql is not recent enough
[nominatim.git] / test / python / tools / test_sp_csv_loader.py
index 6f5670f074a5b3e845b1d65c97439869408153c2..9d0ad9cc8e81c8782819fa2c54cd1bffdd0082fb 100644 (file)
@@ -1,66 +1,49 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
     Tests for methods of the SPCsvLoader class.
 """
 import pytest
 
-from nominatim.errors import UsageError
-from nominatim.tools.special_phrases.sp_csv_loader import SPCsvLoader
+from nominatim_db.errors import UsageError
+from nominatim_db.tools.special_phrases.sp_csv_loader import SPCsvLoader
+from nominatim_db.tools.special_phrases.special_phrase import SpecialPhrase
 
-def test_parse_csv(sp_csv_loader):
+@pytest.fixture
+def sp_csv_loader(src_dir):
     """
-        Test method parse_csv()
-        Should return the right SpecialPhrase objects.
+        Return an instance of SPCsvLoader.
     """
-    phrases = sp_csv_loader.parse_csv()
-    assert check_phrases_content(phrases)
+    csv_path = (src_dir / 'test' / 'testdata' / 'sp_csv_test.csv').resolve()
+    loader = SPCsvLoader(csv_path)
+    return loader
+
 
-def test_next(sp_csv_loader):
+def test_generate_phrases(sp_csv_loader):
     """
-        Test objects returned from the next() method.
-        It should return all SpecialPhrases objects of
-        the sp_csv_test.csv special phrases.
+        Test method parse_csv()
+        Should return the right SpecialPhrase objects.
     """
-    phrases = next(sp_csv_loader)
-    assert check_phrases_content(phrases)
+    phrases = list(sp_csv_loader.generate_phrases())
+
+    assert len(phrases) == 42
+    assert len(set(phrases)) == 41
+
+    assert SpecialPhrase('Billboard', 'advertising', 'billboard', '-') in phrases
+    assert SpecialPhrase('Zip Lines', 'aerialway', 'zip_line', '-') in phrases
 
-def test_check_csv_validity(sp_csv_loader):
+
+def test_invalid_cvs_file():
     """
         Test method check_csv_validity()
         It should raise an exception when file with a
         different exception than .csv is given.
     """
-    sp_csv_loader.csv_path = 'test.csv'
-    sp_csv_loader.check_csv_validity()
-    sp_csv_loader.csv_path = 'test.wrong'
-    with pytest.raises(UsageError):
-        assert sp_csv_loader.check_csv_validity()
-
-def check_phrases_content(phrases):
-    """
-        Asserts that the given phrases list contains
-        the right phrases of the sp_csv_test.csv special phrases.
-    """
-    return  len(phrases) > 1 \
-            and any(p.p_label == 'Billboard'
-                    and p.p_class == 'advertising'
-                    and p.p_type == 'billboard'
-                    and p.p_operator == '-' for p in phrases) \
-            and any(p.p_label == 'Zip Lines'
-                    and p.p_class == 'aerialway'
-                    and p.p_type == 'zip_line'
-                    and p.p_operator == '-' for p in phrases)
+    loader = SPCsvLoader('test.wrong')
 
-@pytest.fixture
-def sp_csv_loader(src_dir):
-    """
-        Return an instance of SPCsvLoader.
-    """
-    csv_path = (src_dir / 'test' / 'testdata' / 'sp_csv_test.csv').resolve()
-    loader = SPCsvLoader(csv_path)
-    return loader
+    with pytest.raises(UsageError, match='not a csv file'):
+        next(loader.generate_phrases())