def test_database_api(self): db = Database() with self.assertRaises(NotImplementedError): db.connect() with self.assertRaises(NotImplementedError): db.trunc_date(Field('abc'), 'day')
def test_fetch_dataframe(self, mock_connect, mock_read_sql): query = 'SELECT 1' mock_read_sql.return_value = 'OK' result = Database().fetch_dataframe(query) self.assertEqual(mock_read_sql.return_value, result) mock_read_sql.assert_called_once_with(query, mock_connect().__enter__())
def test_fetch(self, mock_connect): mock_cursor_func = mock_connect.return_value.__enter__.return_value.cursor mock_cursor = mock_cursor_func.return_value = MagicMock(name='mock_cursor') mock_cursor.fetchall.return_value = 'OK' result = Database().fetch('SELECT 1') self.assertEqual(mock_cursor.fetchall.return_value, result) mock_cursor_func.assert_called_once_with() mock_cursor.execute.assert_called_once_with('SELECT 1') mock_cursor.fetchall.assert_called_once_with()
def test_database_opens_new_connection(self, mock_connect, mock_fetch): db = Database() mock_connect.side_effect = test_connect mock_fetch.side_effect = test_fetch connection_1 = db.fetch(db, 'SELECT a from abc') connection_2 = db.fetch(db, 'SELECT b from def') self.assertEqual(2, mock_connect.call_count) self.assertNotEqual(connection_1, connection_2)
def test_database_reuse_passed_connection(self, mock_connect, mock_fetch): db = Database() mock_connect.side_effect = test_connect mock_fetch.side_effect = test_fetch with db.connect() as connection: connection_1 = db.fetch(db, 'SELECT a from abc', connection=connection) connection_2 = db.fetch(db, 'SELECT b from def', connection=connection) self.assertEqual(1, mock_connect.call_count) self.assertEqual(connection_1, connection_2)
def test_to_char(self): db = Database() to_char = db.to_char(Field('field')) self.assertEqual(str(to_char), 'CAST("field" AS VARCHAR)')
def test_no_custom_middlewares_specified_still_gives_connection_middleware( self): db = Database() self.assertEqual(1, len(db.middlewares)) self.assertIs(db.middlewares[0], connection_middleware)