From c6b32fa946fb02e500c4cfc6a2b946443dfdb8dd Mon Sep 17 00:00:00 2001 From: Lex Berezhny <lex@damoti.com> Date: Mon, 15 Oct 2018 13:25:18 -0400 Subject: [PATCH] basedatabase.py test coverage --- tests/unit/test_database.py | 65 +++++++++++++++++++++++++++++++------ torba/basedatabase.py | 11 ------- 2 files changed, 55 insertions(+), 21 deletions(-) diff --git a/tests/unit/test_database.py b/tests/unit/test_database.py index 860223bea..d6fcc564e 100644 --- a/tests/unit/test_database.py +++ b/tests/unit/test_database.py @@ -32,7 +32,7 @@ class TestQueryBuilder(unittest.TestCase): }) ) - def test_in_list(self): + def test_in(self): self.assertEqual( constraints_to_sql({'txo.age__in': [18, 38]}), ('txo.age IN (18, 38)', {}) @@ -41,14 +41,16 @@ class TestQueryBuilder(unittest.TestCase): constraints_to_sql({'txo.age__in': ['abc123', 'def456']}), ("txo.age IN ('abc123', 'def456')", {}) ) - - def test_in_query(self): self.assertEqual( constraints_to_sql({'txo.age__in': 'SELECT age from ages_table'}), ('txo.age IN (SELECT age from ages_table)', {}) ) - def test_not_in_query(self): + def test_not_in(self): + self.assertEqual( + constraints_to_sql({'txo.age__not_in': [18, 38]}), + ('txo.age NOT IN (18, 38)', {}) + ) self.assertEqual( constraints_to_sql({'txo.age__not_in': 'SELECT age from ages_table'}), ('txo.age NOT IN (SELECT age from ages_table)', {}) @@ -66,13 +68,13 @@ class TestQueryBuilder(unittest.TestCase): self.assertEqual( query( "select * from foo", - a='b', b__in='select * from blah where c=:$c', - d__any={'one': 1, 'two': 2}, limit=10, order_by='b', **{'$c': 3}), + a__not='b', b__in='select * from blah where c=:$c', + d__any={'one__like': 'o', 'two': 2}, limit=10, order_by='b', **{'$c': 3}), ( - "select * from foo WHERE a = :a AND " + "select * from foo WHERE a != :a__not AND " "b IN (select * from blah where c=:$c) AND " - "(one = :d__any_one OR two = :d__any_two) ORDER BY b LIMIT 10", - {'a': 'b', 'd__any_one': 1, 'd__any_two': 2, '$c': 3} + "(one LIKE :d__any_one__like OR two = :d__any_two) ORDER BY b LIMIT 10", + {'a__not': 'b', 'd__any_one__like': 'o', 'd__any_two': 2, '$c': 3} ) ) @@ -85,6 +87,8 @@ class TestQueryBuilder(unittest.TestCase): query("select * from foo", order_by=['foo', 'bar']), ("select * from foo ORDER BY foo, bar", {}) ) + with self.assertRaisesRegex(ValueError, 'order_by must be string or list'): + query("select * from foo", order_by={'foo': 'bar'}) def test_query_limit_offset(self): self.assertEqual( @@ -155,12 +159,52 @@ class TestQueries(AsyncioTestCase): def txi(self, txo): return ledger_class.transaction_class.input_class.spend(txo) - async def test_get_transactions(self): + async def test_queries(self): + self.assertEqual(0, await self.ledger.db.get_address_count()) account1 = await self.create_account() + self.assertEqual(26, await self.ledger.db.get_address_count()) account2 = await self.create_account() + self.assertEqual(52, await self.ledger.db.get_address_count()) + + self.assertEqual(0, await self.ledger.db.get_transaction_count()) + self.assertEqual(0, await self.ledger.db.get_utxo_count()) + self.assertEqual([], await self.ledger.db.get_utxos()) + self.assertEqual(0, await self.ledger.db.get_txo_count()) + self.assertEqual(0, await self.ledger.db.get_balance()) + self.assertEqual(0, await self.ledger.db.get_balance(account=account1)) + self.assertEqual(0, await self.ledger.db.get_balance(account=account2)) + tx1 = await self.create_tx_from_nothing(account1, 1) + self.assertEqual(1, await self.ledger.db.get_transaction_count(account=account1)) + self.assertEqual(0, await self.ledger.db.get_transaction_count(account=account2)) + self.assertEqual(1, await self.ledger.db.get_utxo_count(account=account1)) + self.assertEqual(1, await self.ledger.db.get_txo_count(account=account1)) + self.assertEqual(0, await self.ledger.db.get_txo_count(account=account2)) + self.assertEqual(10**8, await self.ledger.db.get_balance()) + self.assertEqual(10**8, await self.ledger.db.get_balance(account=account1)) + self.assertEqual(0, await self.ledger.db.get_balance(account=account2)) + tx2 = await self.create_tx_from_txo(tx1.outputs[0], account2, 2) + self.assertEqual(2, await self.ledger.db.get_transaction_count(account=account1)) + self.assertEqual(1, await self.ledger.db.get_transaction_count(account=account2)) + self.assertEqual(0, await self.ledger.db.get_utxo_count(account=account1)) + self.assertEqual(1, await self.ledger.db.get_txo_count(account=account1)) + self.assertEqual(1, await self.ledger.db.get_utxo_count(account=account2)) + self.assertEqual(1, await self.ledger.db.get_txo_count(account=account2)) + self.assertEqual(10**8, await self.ledger.db.get_balance()) + self.assertEqual(0, await self.ledger.db.get_balance(account=account1)) + self.assertEqual(10**8, await self.ledger.db.get_balance(account=account2)) + tx3 = await self.create_tx_to_nowhere(tx2.outputs[0], 3) + self.assertEqual(2, await self.ledger.db.get_transaction_count(account=account1)) + self.assertEqual(2, await self.ledger.db.get_transaction_count(account=account2)) + self.assertEqual(0, await self.ledger.db.get_utxo_count(account=account1)) + self.assertEqual(1, await self.ledger.db.get_txo_count(account=account1)) + self.assertEqual(0, await self.ledger.db.get_utxo_count(account=account2)) + self.assertEqual(1, await self.ledger.db.get_txo_count(account=account2)) + self.assertEqual(0, await self.ledger.db.get_balance()) + self.assertEqual(0, await self.ledger.db.get_balance(account=account1)) + self.assertEqual(0, await self.ledger.db.get_balance(account=account2)) txs = await self.ledger.db.get_transactions() self.assertEqual([tx3.id, tx2.id, tx1.id], [tx.id for tx in txs]) @@ -179,6 +223,7 @@ class TestQueries(AsyncioTestCase): self.assertEqual(txs[0].outputs[0].is_my_account, False) self.assertEqual(txs[1].inputs[0].is_my_account, False) self.assertEqual(txs[1].outputs[0].is_my_account, True) + self.assertEqual(2, await self.ledger.db.get_transaction_count(account=account2)) tx = await self.ledger.db.get_transaction(txid=tx2.id) self.assertEqual(tx.id, tx2.id) diff --git a/torba/basedatabase.py b/torba/basedatabase.py index 1493d3c32..dba994620 100644 --- a/torba/basedatabase.py +++ b/torba/basedatabase.py @@ -99,11 +99,6 @@ def rows_to_dict(rows, fields): return [] -def row_dict_or_default(rows, fields, default=None): - dicts = rows_to_dict(rows, fields) - return dicts[0] if dicts else default - - class SQLiteMixin: CREATE_TABLES_QUERY: str @@ -146,12 +141,6 @@ class SQLiteMixin: ) return sql, values - @staticmethod - def execute(t, sql, values): - log.debug(sql) - log.debug(values) - return t.execute(sql, values) - class BaseDatabase(SQLiteMixin):