# -*- coding: utf-8 -*-
# Copyright 2016 LasLabs Inc.

import mock

from odoo.tests import common


ADAPTER = ('odoo.addons.base_external_dbsource_mysql.models'
           '.base_external_dbsource.MySQLdb')


class TestBaseExternalDbsource(common.TransactionCase):

    def setUp(self):
        super(TestBaseExternalDbsource, self).setUp()
        self.dbsource = self.env.ref(
            'base_external_dbsource_mysql.demo_mysql',
        )

    def test_connection_close_mysql(self):
        """ It should close the connection """
        connection = mock.MagicMock()
        res = self.dbsource.connection_close_mysql(connection)
        self.assertEqual(res, connection.close())

    def test_connection_open_mysql(self):
        """ It should call SQLAlchemy open """
        with mock.patch.object(
            self.dbsource, '_connection_open_sqlalchemy'
        ) as parent_method:
            self.dbsource.connection_open_mysql()
            parent_method.assert_called_once_with()

    def test_excecute_mysql(self):
        """ It should pass args to SQLAlchemy execute """
        expect = 'sqlquery', 'sqlparams', 'metadata'
        with mock.patch.object(
            self.dbsource, '_execute_sqlalchemy'
        ) as parent_method:
            self.dbsource.execute_mysql(*expect)
            parent_method.assert_called_once_with(*expect)