X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/bb175cc95898de420781867973b38d033c187e81..139cea5720e3b1030ec9a10c678d723752d707f4:/test/python/tools/test_postcodes.py diff --git a/test/python/tools/test_postcodes.py b/test/python/tools/test_postcodes.py index a3415769..febb2271 100644 --- a/test/python/tools/test_postcodes.py +++ b/test/python/tools/test_postcodes.py @@ -1,3 +1,9 @@ +# 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. """ @@ -5,7 +11,8 @@ import subprocess 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: @@ -58,11 +65,26 @@ class MockPostcodeTable: 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) @@ -187,27 +209,30 @@ def test_can_compute(dsn, table_factory): 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