The Indexer constructor opens a connection to the given database.
import sys
from pathlib import Path
+import psycopg2
+import pytest
+
# always test against the source
sys.path.insert(0, str((Path(__file__) / '..' / '..' / '..').resolve()))
+@pytest.fixture
+def temp_db(monkeypatch):
+ name = 'test_nominatim_python_unittest'
+ with psycopg2.connect(database='postgres') as conn:
+ conn.set_isolation_level(0)
+ with conn.cursor() as cur:
+ cur.execute('DROP DATABASE IF EXISTS {}'.format(name))
+ cur.execute('CREATE DATABASE {}'.format(name))
+
+ monkeypatch.setenv('NOMINATIM_DATABASE_DSN' , 'dbname=' + name)
+
+ yield name
+
+ with psycopg2.connect(database='postgres') as conn:
+ conn.set_isolation_level(0)
+ with conn.cursor() as cur:
+ cur.execute('DROP DATABASE IF EXISTS {}'.format(name))
"""
Tests for command line interface wrapper.
"""
+import psycopg2
import pytest
import nominatim.cli
(['--boundaries-only'], 1, 0),
(['--no-boundaries'], 0, 1),
(['--boundaries-only', '--no-boundaries'], 0, 0)])
-def test_index_command(monkeypatch, params, do_bnds, do_ranks):
+def test_index_command(monkeypatch, temp_db, params, do_bnds, do_ranks):
+ with psycopg2.connect(database=temp_db) as conn:
+ with conn.cursor() as cur:
+ cur.execute("CREATE TABLE import_status (indexed bool)")
bnd_mock = MockParamCapture()
monkeypatch.setattr(nominatim.cli.Indexer, 'index_boundaries', bnd_mock)
rank_mock = MockParamCapture()
class IndexerTestDB:
- def __init__(self, name):
- self.name = name
- self.conn = None
+ def __init__(self, conn):
self.placex_id = itertools.count(100000)
self.osmline_id = itertools.count(500000)
- def setup(self):
- with psycopg2.connect(database='postgres') as conn:
- conn.set_isolation_level(0)
- with conn.cursor() as cur:
- cur.execute('DROP DATABASE IF EXISTS {}'.format(self.name))
- cur.execute('CREATE DATABASE {}'.format(self.name))
- self.conn = psycopg2.connect(database=self.name)
+ self.conn = conn
self.conn.set_isolation_level(0)
with self.conn.cursor() as cur:
cur.execute("""CREATE TABLE placex (place_id BIGINT,
cur.execute("""CREATE TRIGGER osmline_update BEFORE UPDATE ON location_property_osmline
FOR EACH ROW EXECUTE PROCEDURE date_update()""")
-
- def drop(self):
- if self.conn:
- self.conn.close()
- self.conn = None
- with psycopg2.connect(database='postgres') as conn:
- conn.set_isolation_level(0)
- with conn.cursor() as cur:
- cur.execute('DROP DATABASE IF EXISTS {}'.format(self.name))
-
def scalar(self, query):
with self.conn.cursor() as cur:
cur.execute(query)
@pytest.fixture
-def test_db():
- db = IndexerTestDB('test_nominatim_python_unittest')
- db.setup()
- yield db
- db.drop()
+def test_db(temp_db):
+ conn = psycopg2.connect(database=temp_db)
+ yield IndexerTestDB(conn)
+ conn.close()
@pytest.mark.parametrize("threads", [1, 15])