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 result datatype helper functions.
 
  11 from binascii import hexlify
 
  15 import sqlalchemy as sa
 
  18 from nominatim_api import SourceTable, DetailedResult, Point
 
  19 import nominatim_api.results as nresults
 
  22     return hexlify(struct.pack("=biidd", 1, 0x20000001, 4326, x, y)).decode('utf-8')
 
  25     def __init__(self, **kwargs):
 
  26         if 'parent_place_id' not in kwargs:
 
  27             kwargs['parent_place_id'] = None
 
  28         for k, v in kwargs.items():
 
  30         self._mapping = kwargs
 
  33 def test_minimal_detailed_result():
 
  34     res = DetailedResult(SourceTable.PLACEX,
 
  35                          ('amenity', 'post_box'),
 
  38     assert res.lon == 23.1
 
  40     assert res.calculated_importance() == pytest.approx(0.00001)
 
  42 def test_detailed_result_custom_importance():
 
  43     res = DetailedResult(SourceTable.PLACEX,
 
  44                          ('amenity', 'post_box'),
 
  48     assert res.calculated_importance() == 0.4563
 
  51 @pytest.mark.parametrize('func', (nresults.create_from_placex_row,
 
  52                                   nresults.create_from_osmline_row,
 
  53                                   nresults.create_from_tiger_row,
 
  54                                   nresults.create_from_postcode_row))
 
  55 def test_create_row_none(func):
 
  56     assert func(None, DetailedResult) is None
 
  59 @pytest.mark.parametrize('func', (nresults.create_from_osmline_row,
 
  60                                   nresults.create_from_tiger_row))
 
  61 def test_create_row_with_housenumber(func):
 
  62     row = FakeRow(place_id=2345, osm_type='W', osm_id=111, housenumber=4,
 
  63                   address=None, postcode='99900', country_code='xd',
 
  64                   centroid=mkpoint(0, 0))
 
  66     res = func(row, DetailedResult)
 
  68     assert res.housenumber == '4'
 
  69     assert res.extratags is None
 
  70     assert res.category == ('place', 'house')
 
  73 @pytest.mark.parametrize('func', (nresults.create_from_osmline_row,
 
  74                                   nresults.create_from_tiger_row))
 
  75 def test_create_row_without_housenumber(func):
 
  76     row = FakeRow(place_id=2345, osm_type='W', osm_id=111,
 
  77                   startnumber=1, endnumber=11, step=2,
 
  78                   address=None, postcode='99900', country_code='xd',
 
  79                   centroid=mkpoint(0, 0))
 
  81     res = func(row, DetailedResult)
 
  83     assert res.housenumber is None
 
  84     assert res.extratags == {'startnumber': '1', 'endnumber': '11', 'step': '2'}
 
  85     assert res.category == ('place', 'houses')