2021-01-27 00:45:24 +03:00
"""
Tests for status table manipulation .
"""
import datetime as dt
import pytest
import nominatim . db . status
2021-01-30 18:20:10 +03:00
from nominatim . errors import UsageError
2021-01-27 00:45:24 +03:00
OSM_NODE_DATA = """ \
< osm version = " 0.6 " generator = " OpenStreetMap server " copyright = " OpenStreetMap and contributors " attribution = " http://www.openstreetmap.org/copyright " license = " http://opendatacommons.org/licenses/odbl/1-0/ " >
< node id = " 45673 " visible = " true " version = " 1 " changeset = " 2047 " timestamp = " 2006-01-27T22:09:10Z " user = " Foo " uid = " 111 " lat = " 48.7586670 " lon = " 8.1343060 " >
< / node >
< / osm >
"""
2021-04-23 21:53:00 +03:00
def iso_date ( date ) :
return dt . datetime . strptime ( date , nominatim . db . status . ISODATE_FORMAT ) \
. replace ( tzinfo = dt . timezone . utc )
2021-05-20 00:07:39 +03:00
@pytest.fixture ( autouse = True )
def setup_status_table ( status_table ) :
pass
def test_compute_database_date_place_empty ( place_table , temp_db_conn ) :
with pytest . raises ( UsageError ) :
nominatim . db . status . compute_database_date ( temp_db_conn )
def test_compute_database_date_valid ( monkeypatch , place_row , temp_db_conn ) :
2021-01-27 00:45:24 +03:00
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 . status , " get_url " , mock_url )
date = nominatim . db . status . compute_database_date ( temp_db_conn )
assert requested_url == [ ' https://www.openstreetmap.org/api/0.6/node/45673/1 ' ]
2021-04-23 21:53:00 +03:00
assert date == iso_date ( ' 2006-01-27T22:09:10 ' )
2021-01-27 00:45:24 +03:00
2021-05-20 00:07:39 +03:00
def test_compute_database_broken_api ( monkeypatch , place_row , temp_db_conn ) :
2021-01-27 00:45:24 +03:00
place_row ( osm_type = ' N ' , osm_id = 45673 )
requested_url = [ ]
def mock_url ( url ) :
requested_url . append ( url )
return ' <osm version= " 0.6 " generator= " OpenStre '
monkeypatch . setattr ( nominatim . db . status , " get_url " , mock_url )
2021-01-30 18:20:10 +03:00
with pytest . raises ( UsageError ) :
2021-05-20 00:07:39 +03:00
nominatim . db . status . compute_database_date ( temp_db_conn )
2021-01-27 00:45:24 +03:00
2021-05-20 00:07:39 +03:00
def test_set_status_empty_table ( temp_db_conn , temp_db_cursor ) :
2021-01-27 00:45:24 +03:00
date = dt . datetime . fromordinal ( 1000000 ) . replace ( tzinfo = dt . timezone . utc )
nominatim . db . status . set_status ( temp_db_conn , date = date )
2021-05-19 13:11:04 +03:00
assert temp_db_cursor . row_set ( " SELECT * FROM import_status " ) == \
{ ( date , None , True ) }
2021-01-27 00:45:24 +03:00
2021-05-20 00:07:39 +03:00
def test_set_status_filled_table ( temp_db_conn , temp_db_cursor ) :
2021-01-27 00:45:24 +03:00
date = dt . datetime . fromordinal ( 1000000 ) . replace ( tzinfo = dt . timezone . utc )
nominatim . db . status . set_status ( temp_db_conn , date = date )
2021-05-19 11:51:10 +03:00
assert temp_db_cursor . table_rows ( ' import_status ' ) == 1
2021-01-27 00:45:24 +03:00
date = dt . datetime . fromordinal ( 1000100 ) . replace ( tzinfo = dt . timezone . utc )
nominatim . db . status . set_status ( temp_db_conn , date = date , seq = 456 , indexed = False )
2021-05-19 13:11:04 +03:00
assert temp_db_cursor . row_set ( " SELECT * FROM import_status " ) == \
{ ( date , 456 , False ) }
2021-01-28 16:34:17 +03:00
2021-05-20 00:07:39 +03:00
def test_set_status_missing_date ( temp_db_conn , temp_db_cursor ) :
2021-02-14 14:17:30 +03:00
date = dt . datetime . fromordinal ( 1000000 ) . replace ( tzinfo = dt . timezone . utc )
nominatim . db . status . set_status ( temp_db_conn , date = date )
2021-05-19 11:51:10 +03:00
assert temp_db_cursor . table_rows ( ' import_status ' ) == 1
2021-02-14 14:17:30 +03:00
nominatim . db . status . set_status ( temp_db_conn , date = None , seq = 456 , indexed = False )
2021-05-19 13:11:04 +03:00
assert temp_db_cursor . row_set ( " SELECT * FROM import_status " ) == \
{ ( date , 456 , False ) }
2021-02-14 14:17:30 +03:00
2021-05-20 00:07:39 +03:00
def test_get_status_empty_table ( temp_db_conn ) :
2021-01-28 16:34:17 +03:00
assert nominatim . db . status . get_status ( temp_db_conn ) == ( None , None , None )
2021-05-20 00:07:39 +03:00
def test_get_status_success ( temp_db_conn ) :
2021-01-28 16:34:17 +03:00
date = dt . datetime . fromordinal ( 1000000 ) . replace ( tzinfo = dt . timezone . utc )
nominatim . db . status . set_status ( temp_db_conn , date = date , seq = 667 , indexed = False )
assert nominatim . db . status . get_status ( temp_db_conn ) == \
( date , 667 , False )
2021-01-30 17:50:34 +03:00
@pytest.mark.parametrize ( " old_state " , [ True , False ] )
@pytest.mark.parametrize ( " new_state " , [ True , False ] )
2021-05-20 00:07:39 +03:00
def test_set_indexed ( temp_db_conn , temp_db_cursor , old_state , new_state ) :
2021-01-30 17:50:34 +03:00
date = dt . datetime . fromordinal ( 1000000 ) . replace ( tzinfo = dt . timezone . utc )
nominatim . db . status . set_status ( temp_db_conn , date = date , indexed = old_state )
nominatim . db . status . set_indexed ( temp_db_conn , new_state )
assert temp_db_cursor . scalar ( " SELECT indexed FROM import_status " ) == new_state
2021-05-20 00:07:39 +03:00
def test_set_indexed_empty_status ( temp_db_conn , temp_db_cursor ) :
2021-01-30 17:50:34 +03:00
nominatim . db . status . set_indexed ( temp_db_conn , True )
2021-05-19 11:51:10 +03:00
assert temp_db_cursor . table_rows ( " import_status " ) == 0
2021-01-30 17:50:34 +03:00
2021-05-20 00:07:39 +03:00
def test_log_status ( temp_db_conn , temp_db_cursor ) :
2021-01-30 17:50:34 +03:00
date = dt . datetime . fromordinal ( 1000000 ) . replace ( tzinfo = dt . timezone . utc )
start = dt . datetime . now ( ) - dt . timedelta ( hours = 1 )
2021-05-20 00:07:39 +03:00
2021-01-30 17:50:34 +03:00
nominatim . db . status . set_status ( temp_db_conn , date = date , seq = 56 )
nominatim . db . status . log_status ( temp_db_conn , start , ' index ' )
2021-05-20 00:07:39 +03:00
temp_db_conn . commit ( )
2021-05-19 11:51:10 +03:00
assert temp_db_cursor . table_rows ( " import_osmosis_log " ) == 1
2021-05-20 00:07:39 +03:00
assert temp_db_cursor . scalar ( " SELECT batchseq FROM import_osmosis_log " ) == 56
assert temp_db_cursor . scalar ( " SELECT event FROM import_osmosis_log " ) == ' index '