+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2024 by the Nominatim developer community.
+# For a full list of authors see the git log.
"""
Tests for functions to maintain the artificial postcode table.
"""
import pytest
-from nominatim.tools import postcodes
+from nominatim_db.tools import postcodes
+from nominatim_db.data import country_info
import dummy_tokenizer
class MockPostcodeTable:
country_code, postcode,
geometry)
VALUES (nextval('seq_place'), 1, %s, %s,
- 'SRID=4326;POINT(%s %s)')""",
+ ST_SetSRID(ST_MakePoint(%s, %s), 4326))""",
(country, postcode, x, y))
self.conn.commit()
def tokenizer():
return dummy_tokenizer.DummyTokenizer(None, None)
+
@pytest.fixture
-def postcode_table(temp_db_conn, placex_table, word_table):
+def postcode_table(def_config, temp_db_conn, placex_table):
+ country_info.setup_country_config(def_config)
return MockPostcodeTable(temp_db_conn)
+@pytest.fixture
+def insert_implicit_postcode(placex_table, place_row):
+ """
+ Inserts data into the placex and place table
+ which can then be used to compute one postcode.
+ """
+ def _insert_implicit_postcode(osm_id, country, geometry, address):
+ placex_table.add(osm_id=osm_id, country=country, geom=geometry)
+ place_row(osm_id=osm_id, geom='SRID=4326;'+geometry, address=address)
+
+ return _insert_implicit_postcode
+
+
def test_postcodes_empty(dsn, postcode_table, place_table,
tmp_path, tokenizer):
postcodes.update_postcodes(dsn, tmp_path, tokenizer)
table_factory('place')
assert postcodes.can_compute(dsn)
+
def test_no_placex_entry(dsn, tmp_path, temp_db_cursor, place_row, postcode_table, tokenizer):
#Rewrite the get_country_code function to verify its execution.
temp_db_cursor.execute("""
CREATE OR REPLACE FUNCTION get_country_code(place geometry)
RETURNS TEXT AS $$ BEGIN
- RETURN 'fr';
+ RETURN 'yy';
END; $$ LANGUAGE plpgsql;
""")
place_row(geom='SRID=4326;POINT(10 12)', address=dict(postcode='AB 4511'))
postcodes.update_postcodes(dsn, tmp_path, tokenizer)
- assert postcode_table.row_set == {('fr', 'AB 4511', 10, 12)}
+ assert postcode_table.row_set == {('yy', 'AB 4511', 10, 12)}
-@pytest.fixture
-def insert_implicit_postcode(placex_table, place_row):
- """
- Inserts data into the placex and place table
- which can then be used to compute one postcode.
- """
- def _insert_implicit_postcode(osm_id, country, geometry, address):
- placex_table.add(osm_id=osm_id, country=country, geom=geometry)
- place_row(osm_id=osm_id, geom='SRID=4326;'+geometry, address=address)
- return _insert_implicit_postcode
+def test_discard_badly_formatted_postcodes(dsn, tmp_path, temp_db_cursor, place_row, postcode_table, tokenizer):
+ #Rewrite the get_country_code function to verify its execution.
+ temp_db_cursor.execute("""
+ CREATE OR REPLACE FUNCTION get_country_code(place geometry)
+ RETURNS TEXT AS $$ BEGIN
+ RETURN 'fr';
+ END; $$ LANGUAGE plpgsql;
+ """)
+ place_row(geom='SRID=4326;POINT(10 12)', address=dict(postcode='AB 4511'))
+ postcodes.update_postcodes(dsn, tmp_path, tokenizer)
+
+ assert not postcode_table.row_set