1 # SPDX-License-Identifier: GPL-3.0-or-later
3 # This file is part of Nominatim. (https://nominatim.org)
5 # Copyright (C) 2024 by the Nominatim developer community.
6 # For a full list of authors see the git log.
8 Tests for the deletable v1 API call.
11 from pathlib import Path
16 import psycopg2.extras
18 from fake_adaptor import FakeAdaptor, FakeError, FakeResponse
20 import nominatim_api.v1.server_glue as glue
21 import nominatim_api as napi
23 @pytest_asyncio.fixture
25 api = napi.NominatimAPIAsync(Path('/invalid'))
30 class TestDeletableEndPoint:
32 @pytest.fixture(autouse=True)
33 def setup_deletable_table(self, temp_db_cursor, table_factory, temp_db_with_extensions):
34 psycopg2.extras.register_hstore(temp_db_cursor)
35 table_factory('import_polygon_delete',
36 definition='osm_id bigint, osm_type char(1), class text, type text',
37 content=[(345, 'N', 'boundary', 'administrative'),
38 (781, 'R', 'landuse', 'wood'),
39 (781, 'R', 'landcover', 'grass')])
40 table_factory('placex',
41 definition="""place_id bigint, osm_id bigint, osm_type char(1),
42 class text, type text, name HSTORE, country_code char(2)""",
43 content=[(1, 345, 'N', 'boundary', 'administrative', {'old_name': 'Former'}, 'ab'),
44 (2, 781, 'R', 'landuse', 'wood', {'name': 'Wood'}, 'cd'),
45 (3, 781, 'R', 'landcover', 'grass', None, 'cd')])
50 async def test_deletable(self, api):
53 resp = await glue.deletable_endpoint(api, a)
54 results = json.loads(resp.output)
56 results.sort(key=lambda r: r['place_id'])
58 assert results == [{'place_id': 1, 'country_code': 'ab', 'name': None,
59 'osm_id': 345, 'osm_type': 'N',
60 'class': 'boundary', 'type': 'administrative'},
61 {'place_id': 2, 'country_code': 'cd', 'name': 'Wood',
62 'osm_id': 781, 'osm_type': 'R',
63 'class': 'landuse', 'type': 'wood'},
64 {'place_id': 3, 'country_code': 'cd', 'name': None,
65 'osm_id': 781, 'osm_type': 'R',
66 'class': 'landcover', 'type': 'grass'}]