1+ import datetime
12import logging
23
34import pytest
4- from sqlalchemy import func , select
5+ from sqlalchemy import update
6+ from sqlalchemy .engine import Engine
7+ from sqlalchemy .orm .session import Session
58
69from wadas ._version import __dbversion__
710from wadas .domain .database import DataBase , SQLiteDataBase
@@ -63,28 +66,141 @@ def test_unsupported_database(init):
6366 DataBase .initialize ("DUMMY-DB-TYPE" , "NOT-USED-HOST" , None , "" , "" )
6467
6568
69+ def test_db_not_enabled (init ):
70+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" , False ) is True
71+ assert DataBase .wadas_db .enabled is False
72+
73+
74+ def test_db_enabled (init ):
75+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" ) is True
76+ assert DataBase .wadas_db .enabled is True
77+
78+
79+ def test_default_db_version (init ):
80+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" ) is True
81+ assert DataBase .wadas_db .version == __dbversion__
82+
83+
84+ def test_set_db_version (init ):
85+ assert (
86+ DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" , version = "X.Y.Z" )
87+ is True
88+ )
89+ assert DataBase .wadas_db .version == "X.Y.Z"
90+
91+
6692def test_no_engine_and_no_database (init ):
6793 with pytest .raises (RuntimeError , match = "The database and db engine have not been initialized." ):
68- SQLiteDataBase .get_engine ()
94+ DataBase .get_engine ()
95+
96+
97+ def test_get_engine (init ):
98+ assert DataBase .wadas_db_engine is None
99+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" , False ) is True
100+ assert DataBase .wadas_db is not None
101+ assert DataBase .get_engine () is DataBase .wadas_db_engine
102+ assert DataBase .wadas_db_engine is not None
103+ assert isinstance (DataBase .wadas_db_engine , Engine ) is True
69104
70105
71106def test_no_database (init ):
72- assert SQLiteDataBase .get_instance () is None
107+ assert DataBase .get_instance () is None
108+
109+
110+ def test_get_instance (init ):
111+ assert DataBase .wadas_db is None
112+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" ) is True
113+ assert DataBase .get_instance () is DataBase .wadas_db
114+ assert DataBase .wadas_db is not None
115+
116+
117+ def test_get_disabled_db (init ):
118+ assert DataBase .wadas_db is None
119+ assert DataBase .get_enabled_db () is None
120+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" , False ) is True
121+ assert DataBase .wadas_db is not None
122+ assert DataBase .get_enabled_db () is None
123+ assert DataBase .wadas_db is not None
124+
125+
126+ def test_get_enabled_db (init ):
127+ assert DataBase .wadas_db is None
128+ assert DataBase .get_enabled_db () is None
129+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" ) is True
130+ assert DataBase .wadas_db is not None
131+ assert DataBase .get_enabled_db () is DataBase .wadas_db
73132
74133
75- def test_failing_on_destroy_instance (init ):
134+ def test_destroy_instance (init ):
76135 DataBase .wadas_db_engine = True
77- SQLiteDataBase .destroy_instance ()
136+ DataBase .destroy_instance ()
78137 assert DataBase .wadas_db_engine is None
79138
80139
140+ def test_no_session_without_engine (init ):
141+ assert DataBase .create_session () is None
142+
143+
144+ def test_create_session (init ):
145+ assert DataBase .initialize (DataBase .DBTypes .SQLITE , ":memory:" , None , "" , "" ) is True
146+ session = DataBase .create_session ()
147+ assert isinstance (session , Session ) is True
148+
149+
150+ def test_no_db_uuid_without_session (init ):
151+ assert DataBase .get_db_uuid () is None
152+
153+
154+ def test_no_db_uuid_without_populated_db (db ):
155+ db , session = db
156+ assert db .get_db_uuid () is None
157+
158+
159+ def test_get_db_uuid (db ):
160+ db , session = db
161+ db .populate_db ("FAKE_UUID" )
162+ assert db .get_db_uuid () == "FAKE_UUID"
163+
164+
165+ def test_no_db_version_without_session (init ):
166+ assert DataBase .get_db_version () is None
167+
168+
169+ def test_no_db_version_without_populated_db (db ):
170+ db , session = db
171+ assert db .get_db_version () is None
172+
173+
174+ def test_get_db_version (db ):
175+ db , session = db
176+ db .populate_db ("FAKE_UUID" )
177+ assert db .get_db_version () == __dbversion__
178+
179+
180+ def test_bad_statement_on_run_query (db ):
181+ db , session = db
182+ db .populate_db ("FAKE_UUID" )
183+ assert DataBase .run_query (None ) is False
184+
185+
186+ def test_run_query (db ):
187+ db , session = db
188+ db .populate_db ("FAKE_UUID" )
189+ stmt = update (DBMetadata ).values (project_uuid = "NEW_FAKE_UUID" )
190+ assert DataBase .run_query (stmt ) is True
191+ assert db .get_db_uuid () == "NEW_FAKE_UUID"
192+
193+
81194def test_connection_string (db ):
82195 db , session = db
83196 assert db is not None
84197 assert DataBase .wadas_db_engine is not None
85198 assert db .get_connection_string () == "sqlite:///:memory:"
86199
87200
201+ # Specific SQLite tests start here.
202+
203+
88204def test_database_not_initialized (init ):
89205 assert SQLiteDataBase ("NOT-USED-HOST" ).create_database () is False
90206
@@ -106,16 +222,29 @@ def test_serialize(init):
106222
107223def test_empty_database (db ):
108224 db , session = db
109- assert session .execute (select (func .count ()).select_from (ActuationEvent )).scalar () == 0
110- assert session .execute (select (func .count ()).select_from (Actuator )).scalar () == 0
111- assert session .execute (select (func .count ()).select_from (Camera )).scalar () == 0
112- assert session .execute (select (func .count ()).select_from (ClassifiedAnimals )).scalar () == 0
113- assert session .execute (select (func .count ()).select_from (DBMetadata )).scalar () == 0
114- assert session .execute (select (func .count ()).select_from (DetectionEvent )).scalar () == 0
115- assert session .execute (select (func .count ()).select_from (FeederActuator )).scalar () == 0
116- assert session .execute (select (func .count ()).select_from (FTPCamera )).scalar () == 0
117- assert session .execute (select (func .count ()).select_from (RoadSignActuator )).scalar () == 0
118- assert session .execute (select (func .count ()).select_from (USBCamera )).scalar () == 0
119- assert (
120- session .execute (select (func .count ()).select_from (camera_actuator_association )).scalar () == 0
121- )
225+ assert session .query (ActuationEvent ).count () == 0
226+ assert session .query (Actuator ).count () == 0
227+ assert session .query (Camera ).count () == 0
228+ assert session .query (ClassifiedAnimals ).count () == 0
229+ assert session .query (DBMetadata ).count () == 0
230+ assert session .query (DetectionEvent ).count () == 0
231+ assert session .query (FeederActuator ).count () == 0
232+ assert session .query (FTPCamera ).count () == 0
233+ assert session .query (RoadSignActuator ).count () == 0
234+ assert session .query (USBCamera ).count () == 0
235+ assert session .query (camera_actuator_association ).count () == 0
236+
237+
238+ def test_create_metadata (db ):
239+ db , session = db
240+ db .populate_db ("FAKE_UUID" )
241+ rows = session .query (DBMetadata ).all ()
242+ assert len (rows ) == 1
243+ row = rows [0 ]
244+ assert row .db_id == 1
245+ assert row .version == __dbversion__
246+ time_delta = datetime .datetime .now () - row .applied_at
247+ assert time_delta .days == 0
248+ assert time_delta .seconds == 0
249+ assert row .description == "WADAS database"
250+ assert row .project_uuid == "FAKE_UUID"
0 commit comments