1 # SPDX-License-Identifier: GPL-2.0-only
 
   3 # This file is part of Nominatim. (https://nominatim.org)
 
   5 # Copyright (C) 2025 by the Nominatim developer community.
 
   6 # For a full list of authors see the git log.
 
   8 Tests for correctly assigning wikipedia pages to places.
 
  15 from nominatim_db.tools.refresh import (import_wikipedia_articles,
 
  21 def wiki_csv(tmp_path, sql_preprocessor):
 
  23         with gzip.open(tmp_path / 'wikimedia-importance.csv.gz', mode='wt') as fd:
 
  24             writer = csv.DictWriter(fd, fieldnames=['language', 'type', 'title',
 
  25                                                     'importance', 'wikidata_id'],
 
  26                                     delimiter='\t', quotechar='|')
 
  28             for lang, title, importance, wd in data:
 
  29                 writer.writerow({'language': lang, 'type': 'a',
 
  30                                  'title': title, 'importance': str(importance),
 
  37 @pytest.mark.parametrize('extra', [{'wikipedia:en': 'Test'},
 
  38                                    {'wikipedia': 'en:Test'},
 
  39                                    {'wikidata': 'Q123'}])
 
  40 def test_wikipedia(dsn, temp_db_conn, temp_db_cursor, table_factory,
 
  41                    def_config, wiki_csv, placex_table, extra):
 
  42     import_wikipedia_articles(dsn, wiki_csv([('en', 'Test', 0.3, 'Q123')]))
 
  43     create_functions(temp_db_conn, def_config)
 
  45     content = temp_db_cursor.row_set(
 
  46         'SELECT language, title, importance, wikidata FROM wikimedia_importance')
 
  47     assert content == set([('en', 'Test', 0.3, 'Q123')])
 
  49     place_id = placex_table.add(osm_id=12, extratags=extra)
 
  50     table_factory('search_name',
 
  51                   'place_id BIGINT, importance FLOAT',
 
  54     recompute_importance(temp_db_conn)
 
  56     content = temp_db_cursor.row_set('SELECT wikipedia, importance FROM placex')
 
  57     assert content == set([('en:Test', 0.3)])
 
  58     simp = temp_db_cursor.scalar('SELECT importance FROM search_name WHERE place_id = %s',
 
  63 def test_wikipedia_no_match(dsn, temp_db_conn, temp_db_cursor, def_config, wiki_csv,
 
  64                             placex_table, table_factory):
 
  65     import_wikipedia_articles(dsn, wiki_csv([('de', 'Test', 0.3, 'Q123')]))
 
  66     create_functions(temp_db_conn, def_config)
 
  68     place_id = placex_table.add(osm_id=12, extratags={'wikipedia': 'en:Test'}, rank_search=10)
 
  69     table_factory('search_name',
 
  70                   'place_id BIGINT, importance FLOAT',
 
  73     recompute_importance(temp_db_conn)
 
  75     content = temp_db_cursor.row_set('SELECT wikipedia, importance FROM placex')
 
  76     assert list(content) == [(None, pytest.approx(0.26667666))]
 
  77     simp = temp_db_cursor.scalar('SELECT importance FROM search_name WHERE place_id = %s',
 
  79     assert simp == pytest.approx(0.26667666)