From 59f812c1e17a5e025f8ef8417d8927238594fe06 Mon Sep 17 00:00:00 2001 From: xbgmsharp Date: Mon, 2 Dec 2024 21:39:13 +0100 Subject: [PATCH] Add unit tests for MobilityDB support --- tests/sql/mobilitydb.sql | 81 +++++++++++++++++++++++++++++++++ tests/sql/mobilitydb.sql.output | 71 +++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 tests/sql/mobilitydb.sql create mode 100644 tests/sql/mobilitydb.sql.output diff --git a/tests/sql/mobilitydb.sql b/tests/sql/mobilitydb.sql new file mode 100644 index 0000000..6f3a709 --- /dev/null +++ b/tests/sql/mobilitydb.sql @@ -0,0 +1,81 @@ +--------------------------------------------------------------------------- +-- Listing +-- + +-- List current database +select current_database(); + +-- connect to the DB +\c signalk + +-- output display format +\x on + +-- Assign vessel_id var +SELECT v.vessel_id as "vessel_id_kapla" FROM auth.vessels v WHERE v.owner_email = 'demo+kapla@openplotter.cloud' \gset +SELECT v.vessel_id as "vessel_id_aava" FROM auth.vessels v WHERE v.owner_email = 'demo+aava@openplotter.cloud' \gset + +-- user_role +SET ROLE user_role; +-- Switch user as aava +SELECT set_config('vessel.id', :'vessel_id_aava', false) IS NOT NULL as vessel_id; + +-- Update notes +\echo 'Add a note for an entry from a trip' +-- Get original value, should be empty +SELECT numInstants(trip), valueAtTimestamp(trip_notes,timestampN(trip,14)) from api.logbook where id = 3; +-- Create the string +SELECT concat('["fishing"@', timestampN(trip,14),',""@',timestampN(trip,15),']') as to_be_update FROM api.logbook where id = 3 \gset +--\echo :to_be_update +-- Update the notes +SELECT api.update_trip_notes_fn(3, :'to_be_update'); +-- Compare with previous value, should include "fishing" +SELECT valueAtTimestamp(trip_notes,timestampN(trip,14)) from api.logbook where id = 3; + +-- Delete notes +\echo 'Delete an entry from a trip' +-- Get original value, should be 45 +SELECT numInstants(trip), jsonb_array_length(api.export_logbook_geojson_point_trip_fn(id)->'features') from api.logbook where id = 3; +-- Extract the timestamps of the invalid coords +--SELECT timestampN(trip,14) as "to_be_delete" FROM api.logbook where id = 3 \gset +SELECT concat('[', timestampN(trip,13),',',timestampN(trip,14),')') as to_be_delete FROM api.logbook where id = 3 \gset +--\echo :to_be_delete +-- Delete the entry for all trip sequence +SELECT api.delete_trip_entry_fn(3, :'to_be_delete'); +-- Compare with previous value, should be 44 +SELECT numInstants(trip), jsonb_array_length(api.export_logbook_geojson_point_trip_fn(id)->'features') from api.logbook where id = 3; + +-- Export PostGIS geography from a trip +\echo 'Export PostGIS geography from trajectory' +SELECT ST_IsValid(trajectory(trip)::geometry) IS TRUE FROM api.logbook WHERE vessel_id = current_setting('vessel.id', false); + +-- Export GeoJSON from a trip +\echo 'Export GeoJSON with properties from a trip' +SELECT jsonb_array_length(api.export_logbook_geojson_point_trip_fn(3)->'features'); + +-- Export GPX from a trip +\echo 'Export GPX from a trip' +SELECT api.export_logbook_gpx_trip_fn(3) IS NOT NULL; + +-- Export KML from a trip +\echo 'Export KML from a trip' +SELECT api.export_logbook_kml_trip_fn(3) IS NOT NULL; + +-- Switch user as kapla +SELECT set_config('vessel.id', :'vessel_id_kapla', false) IS NOT NULL as vessel_id; + +-- Export timelapse as Geometry LineString from a trip +\echo 'Export timelapse as Geometry LineString from a trip' +SELECT api.export_logbooks_geojson_linestring_trips_fn(1,2) FROM api.logbook WHERE vessel_id = current_setting('vessel.id', false); + +-- Export timelapse as Geometry Point from a trip +\echo 'Export timelapse as Geometry Point from a trip' +SELECT api.export_logbooks_geojson_point_trips_fn(1,2) IS NOT NULL FROM api.logbook WHERE vessel_id = current_setting('vessel.id', false); + +-- Export GPX from trips +\echo 'Export GPX from trips' +SELECT api.export_logbooks_gpx_trips_fn(1,2) IS NOT NULL FROM api.logbook WHERE vessel_id = current_setting('vessel.id', false); + +-- Export KML from trips +\echo 'Export KML from trips' +SELECT api.export_logbooks_kml_trips_fn(1,2) IS NOT NULL FROM api.logbook WHERE vessel_id = current_setting('vessel.id', false); diff --git a/tests/sql/mobilitydb.sql.output b/tests/sql/mobilitydb.sql.output new file mode 100644 index 0000000..196a79c --- /dev/null +++ b/tests/sql/mobilitydb.sql.output @@ -0,0 +1,71 @@ + current_database +------------------ + signalk +(1 row) + +You are now connected to database "signalk" as user "username". +Expanded display is on. +SET +-[ RECORD 1 ] +vessel_id | t + +Add a note for an entry from a trip +-[ RECORD 1 ]----+--- +numinstants | 45 +valueattimestamp | + +-[ RECORD 1 ]--------+- +update_trip_notes_fn | + +-[ RECORD 1 ]----+-------- +valueattimestamp | fishing + +Delete an entry from a trip +-[ RECORD 1 ]------+--- +numinstants | 45 +jsonb_array_length | 45 + +-[ RECORD 1 ]--------+- +delete_trip_entry_fn | + +-[ RECORD 1 ]------+--- +numinstants | 44 +jsonb_array_length | 44 + +Export PostGIS geography from trajectory +-[ RECORD 1 ] +?column? | t +-[ RECORD 2 ] +?column? | t + +Export GeoJSON with properties from a trip +-[ RECORD 1 ]------+--- +jsonb_array_length | 44 + +Export GPX from a trip +-[ RECORD 1 ] +?column? | t + +Export KML from a trip +-[ RECORD 1 ] +?column? | t + +-[ RECORD 1 ] +vessel_id | t + +Export timelapse as Geometry LineString from a trip +-[ RECORD 1 ]-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +export_logbooks_geojson_linestring_trips_fn | {"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "LineString", "coordinates": [[23.530866667, 60.077666667], [23.52355, 60.07065], [23.515866667, 60.0637], [23.507866667, 60.056716667], [23.500533333, 60.04915], [23.493, 60.041633333], [23.485466667, 60.033983333], [23.479033333, 60.026216667], [23.47295, 60.01835], [23.46745, 60.01045], [23.461033333, 60.003516667], [23.45415, 59.99755], [23.445683333, 59.99235], [23.438766667, 59.989266667], [23.435116667, 59.987866667], [23.43165, 59.986333333], [23.4292, 59.984833333], [23.432566667, 59.9862], [23.43375, 59.987266667], [23.431566667, 59.98615], [23.4307, 59.98565], [23.429383333, 59.984683333], [23.421066667, 59.978233333], [23.431, 59.977716667], [23.432133333, 59.976883333], [23.4321, 59.976883333]]}, "properties": {}}]} + +Export timelapse as Geometry Point from a trip +-[ RECORD 1 ] +?column? | t + +Export GPX from trips +-[ RECORD 1 ] +?column? | t + +Export KML from trips +-[ RECORD 1 ] +?column? | t +