]> git.openstreetmap.org Git - nominatim.git/blob - test/python/api/search/test_search_country.py
always run function update on migrations
[nominatim.git] / test / python / api / search / test_search_country.py
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2023 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 Tests for running the country searcher.
9 """
10 import pytest
11
12 import nominatim.api as napi
13 from nominatim.api.types import SearchDetails
14 from nominatim.api.search.db_searches import CountrySearch
15 from nominatim.api.search.db_search_fields import WeightedStrings
16
17
18 def run_search(apiobj, global_penalty, ccodes,
19                country_penalties=None, details=SearchDetails()):
20     if country_penalties is None:
21         country_penalties = [0.0] * len(ccodes)
22
23     class MySearchData:
24         penalty = global_penalty
25         countries = WeightedStrings(ccodes, country_penalties)
26
27     search = CountrySearch(MySearchData())
28
29     async def run():
30         async with apiobj.api._async_api.begin() as conn:
31             return await search.lookup(conn, details)
32
33     return apiobj.async_to_sync(run())
34
35
36 def test_find_from_placex(apiobj):
37     apiobj.add_placex(place_id=55, class_='boundary', type='administrative',
38                       rank_search=4, rank_address=4,
39                       name={'name': 'Lolaland'},
40                       country_code='yw',
41                       centroid=(10, 10),
42                       geometry='POLYGON((9.5 9.5, 9.5 10.5, 10.5 10.5, 10.5 9.5, 9.5 9.5))')
43
44     results = run_search(apiobj, 0.5, ['de', 'yw'], [0.0, 0.3])
45
46     assert len(results) == 1
47     assert results[0].place_id == 55
48     assert results[0].accuracy == 0.8
49
50 def test_find_from_fallback_countries(apiobj):
51     apiobj.add_country('ro', 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))')
52     apiobj.add_country_name('ro', {'name': 'România'})
53
54     results = run_search(apiobj, 0.0, ['ro'])
55
56     assert len(results) == 1
57     assert results[0].names == {'name': 'România'}
58
59
60 def test_find_none(apiobj):
61     assert len(run_search(apiobj, 0.0, ['xx'])) == 0