# SPDX-License-Identifier: GPL-3.0-or-later # # This file is part of Nominatim. (https://nominatim.org) # # Copyright (C) 2025 by the Nominatim developer community. # For a full list of authors see the git log. """ Tests for status table manipulation. """ import datetime as dt import pytest import nominatim_db.db.status from nominatim_db.errors import UsageError OSM_NODE_DATA = """\ """ # noqa def iso_date(date): return dt.datetime.strptime(date, nominatim_db.db.status.ISODATE_FORMAT)\ .replace(tzinfo=dt.timezone.utc) @pytest.fixture(autouse=True) def setup_status_table(status_table): pass @pytest.mark.parametrize('offline', [True, False]) def test_compute_database_date_from_osm2pgsql(table_factory, temp_db_conn, offline): table_factory('osm2pgsql_properties', 'property TEXT, value TEXT', content=(('current_timestamp', '2024-01-03T23:45:54Z'), )) date = nominatim_db.db.status.compute_database_date(temp_db_conn, offline=offline) assert date == iso_date('2024-01-03T23:45:54') def test_compute_database_date_from_osm2pgsql_nodata(table_factory, temp_db_conn): table_factory('osm2pgsql_properties', 'property TEXT, value TEXT') with pytest.raises(UsageError, match='Cannot determine database date from data in offline mode'): nominatim_db.db.status.compute_database_date(temp_db_conn, offline=True) def test_compute_database_date_place_empty(place_table, temp_db_conn): with pytest.raises(UsageError): nominatim_db.db.status.compute_database_date(temp_db_conn) def test_compute_database_date_valid(monkeypatch, place_row, temp_db_conn): place_row(osm_type='N', osm_id=45673) requested_url = [] def mock_url(url): requested_url.append(url) return OSM_NODE_DATA monkeypatch.setattr(nominatim_db.db.status, "get_url", mock_url) date = nominatim_db.db.status.compute_database_date(temp_db_conn) assert requested_url == ['https://www.openstreetmap.org/api/0.6/node/45673/1'] assert date == iso_date('2006-01-27T22:09:10') def test_compute_database_broken_api(monkeypatch, place_row, temp_db_conn): place_row(osm_type='N', osm_id=45673) requested_url = [] def mock_url(url): requested_url.append(url) return '