X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/7222235579bc0d287c86fea6d7e22959132c7377..8e5a19b39209f20f41b7bd10ff7dbcdb8a3dcb9c:/test/python/mocks.py diff --git a/test/python/mocks.py b/test/python/mocks.py index 415e18b3..82e700bd 100644 --- a/test/python/mocks.py +++ b/test/python/mocks.py @@ -1,18 +1,88 @@ +# 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. """ Custom mocks for testing. """ +import itertools +import psycopg2.extras -class MockParamCapture: - """ Mock that records the parameters with which a function was called - as well as the number of calls. +from nominatim_db.db import properties + +# This must always point to the mock word table for the default tokenizer. +from mock_icu_word_table import MockIcuWordTable as MockWordTable + +class MockPlacexTable: + """ A placex table for testing. + """ + def __init__(self, conn): + self.idseq = itertools.count(10000) + self.conn = conn + with conn.cursor() as cur: + cur.execute("""CREATE TABLE placex ( + place_id BIGINT, + parent_place_id BIGINT, + linked_place_id BIGINT, + importance FLOAT, + indexed_date TIMESTAMP, + geometry_sector INTEGER, + rank_address SMALLINT, + rank_search SMALLINT, + partition SMALLINT, + indexed_status SMALLINT, + osm_id int8, + osm_type char(1), + class text, + type text, + name hstore, + admin_level smallint, + address hstore, + extratags hstore, + token_info jsonb, + geometry Geometry(Geometry,4326), + wikipedia TEXT, + country_code varchar(2), + housenumber TEXT, + postcode TEXT, + centroid GEOMETRY(Geometry, 4326))""") + cur.execute("CREATE SEQUENCE IF NOT EXISTS seq_place") + conn.commit() + + def add(self, osm_type='N', osm_id=None, cls='amenity', typ='cafe', names=None, + admin_level=None, address=None, extratags=None, geom='POINT(10 4)', + country=None, housenumber=None, rank_search=30): + with self.conn.cursor() as cur: + psycopg2.extras.register_hstore(cur) + cur.execute("""INSERT INTO placex (place_id, osm_type, osm_id, class, + type, name, admin_level, address, + housenumber, rank_search, + extratags, geometry, country_code) + VALUES(nextval('seq_place'), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", + (osm_type, osm_id or next(self.idseq), cls, typ, names, + admin_level, address, housenumber, rank_search, + extratags, 'SRID=4326;' + geom, + country)) + self.conn.commit() + + +class MockPropertyTable: + """ A property table for testing. """ - def __init__(self, retval=0): - self.called = 0 - self.return_value = retval - - def __call__(self, *args, **kwargs): - self.called += 1 - self.last_args = args - self.last_kwargs = kwargs - return self.return_value + def __init__(self, conn): + self.conn = conn + + + def set(self, name, value): + """ Set a property in the table to the given value. + """ + properties.set_property(self.conn, name, value) + + + def get(self, name): + """ Set a property in the table to the given value. + """ + return properties.get_property(self.conn, name)