From 082916b45d1507ffbe28dd04eff7aa717a308d62 Mon Sep 17 00:00:00 2001 From: lufte Date: Fri, 2 Jul 2021 23:25:59 -0300 Subject: Add unit tests for the Transaction class --- tests/unit/misc/test_sql.py | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/unit/misc/test_sql.py b/tests/unit/misc/test_sql.py index 6843bd182..068298e3c 100644 --- a/tests/unit/misc/test_sql.py +++ b/tests/unit/misc/test_sql.py @@ -23,7 +23,7 @@ import pytest import hypothesis from hypothesis import strategies -from PyQt5.QtSql import QSqlError +from PyQt5.QtSql import QSqlDatabase, QSqlError, QSqlQuery from qutebrowser.misc import sql @@ -379,8 +379,7 @@ class TestSqlQuery: db = sql.Database(str(data_tmpdir / 'test_value_missing.db')) q = db.query('SELECT 0 WHERE 0') q.run() - with pytest.raises(sql.BugError, - match='No result for single-result query'): + with pytest.raises(sql.BugError, match='No result for single-result query'): q.value() def test_num_rows_affected_not_active(self, data_tmpdir): @@ -410,3 +409,36 @@ class TestSqlQuery: q = db.query('SELECT :answer') q.run(answer=42) assert q.bound_values() == {':answer': 42} + + +class TestTransaction: + + def test_successful_transaction(self, data_tmpdir): + path = str(data_tmpdir / 'test_successful_transaction') + db = sql.Database(path) + my_table = db.table('my_table', ['column']) + with db.transaction(): + my_table.insert({'column': 1}) + my_table.insert({'column': 2}) + + db2 = QSqlDatabase.addDatabase('QSQLITE', 'db2') + db2.setDatabaseName(path) + db2.open() + query = QSqlQuery(db2) + query.exec('select count(*) from my_table') + query.next() + assert query.record().value(0) == 0 + assert db.query('select count(*) from my_table').run().value() == 2 + + def test_failed_transaction(self, data_tmpdir): + path = str(data_tmpdir / 'test_failed_transaction') + db = sql.Database(path) + my_table = db.table('my_table', ['column']) + try: + with db.transaction(): + my_table.insert({'column': 1}) + my_table.insert({'column': 2}) + raise Exception('something went horribly wrong') + except Exception: + pass + assert db.query('select count(*) from my_table').run().value() == 0 -- cgit v1.2.3-54-g00ecf