3
0
Fork 0
wuttjamaican/tests/db/test_handler.py

65 lines
2.4 KiB
Python
Raw Normal View History

# -*- coding: utf-8; -*-
from unittest.mock import patch, MagicMock
from wuttjamaican.testing import DataTestCase
try:
import sqlalchemy as sa
from wuttjamaican.db import handler as mod
except ImportError:
pass
else:
class TestDatabaseHandler(DataTestCase):
def make_handler(self, **kwargs):
return mod.DatabaseHandler(self.config, **kwargs)
def test_next_counter_value_sqlite(self):
handler = self.make_handler()
# counter table should not exist yet
metadata = sa.MetaData()
metadata.reflect(self.session.bind)
self.assertNotIn('_counter_testing', metadata.tables)
# using sqlite as backend, should make table for counter
value = handler.next_counter_value(self.session, 'testing')
self.assertEqual(value, 1)
# counter table should exist now
metadata.reflect(self.session.bind)
self.assertIn('_counter_testing', metadata.tables)
# counter increments okay
value = handler.next_counter_value(self.session, 'testing')
self.assertEqual(value, 2)
value = handler.next_counter_value(self.session, 'testing')
self.assertEqual(value, 3)
def test_next_counter_value_postgres(self):
handler = self.make_handler()
# counter table should not exist
metadata = sa.MetaData()
metadata.reflect(self.session.bind)
self.assertNotIn('_counter_testing', metadata.tables)
# nb. we have to pretty much mock this out, can't really
# test true sequence behavior for postgres since tests are
# using sqlite backend.
# using postgres as backend, should use "sequence"
with patch.object(self.session.bind.url, 'get_dialect') as get_dialect:
get_dialect.return_value.name = 'postgresql'
with patch.object(self.session, 'execute') as execute:
execute.return_value.scalar.return_value = 1
value = handler.next_counter_value(self.session, 'testing')
self.assertEqual(value, 1)
execute.return_value.scalar.assert_called_once_with()
# counter table should still not exist
metadata.reflect(self.session.bind)
self.assertNotIn('_counter_testing', metadata.tables)