test/unittest_dbapi.py
author Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
Thu, 23 Apr 2009 08:05:51 +0200
changeset 1445 d3c9b075ceb7
parent 0 b97547f5f1fa
child 1398 5fe84a5f7035
permissions -rw-r--r--
set a size constraint on ECache's title It's not a good idea to use text field with no size constraint and to index them. Somme BDD backends (MySQL for instance) simply don't support it.

from cubicweb import ConnectionError
from cubicweb.dbapi import ProgrammingError
from cubicweb.devtools.apptest import EnvBasedTC


class DBAPITC(EnvBasedTC):
    @property
    def cnx(self):
        return self.login('anon')

    def test_public_repo_api(self):
        cnx = self.cnx
        self.assertEquals(cnx.get_schema(), self.env.repo.schema)
        self.assertEquals(cnx.source_defs(), {'system': {'adapter': 'native', 'uri': 'system'}})
        self.restore_connection() # proper way to close cnx
        self.assertRaises(ProgrammingError, cnx.get_schema)
        self.assertRaises(ProgrammingError, cnx.source_defs)

    def test_db_api(self):
        cnx = self.cnx
        self.assertEquals(cnx.rollback(), None)
        self.assertEquals(cnx.commit(), None)
        self.restore_connection() # proper way to close cnx
        #self.assertEquals(cnx.close(), None)
        self.assertRaises(ProgrammingError, cnx.rollback)
        self.assertRaises(ProgrammingError, cnx.commit)
        self.assertRaises(ProgrammingError, cnx.close)

    def test_api(self):
        cnx = self.cnx
        self.assertEquals(cnx.user(None).login, 'anon')
        self.assertEquals(cnx.describe(1), (u'EGroup', u'system', None))
        self.restore_connection() # proper way to close cnx
        self.assertRaises(ConnectionError, cnx.user, None)
        self.assertRaises(ConnectionError, cnx.describe, 1)

    def test_session_data_api(self):
        cnx = self.cnx
        self.assertEquals(cnx.get_session_data('data'), None)
        self.assertEquals(cnx.session_data(), {})
        cnx.set_session_data('data', 4)
        self.assertEquals(cnx.get_session_data('data'), 4)
        self.assertEquals(cnx.session_data(), {'data': 4})
        cnx.del_session_data('data')
        cnx.del_session_data('whatever')
        self.assertEquals(cnx.get_session_data('data'), None)
        self.assertEquals(cnx.session_data(), {})
        cnx.session_data()['data'] = 4
        self.assertEquals(cnx.get_session_data('data'), 4)
        self.assertEquals(cnx.session_data(), {'data': 4})

    def test_shared_data_api(self):
        cnx = self.cnx
        self.assertEquals(cnx.get_shared_data('data'), None)
        cnx.set_shared_data('data', 4)
        self.assertEquals(cnx.get_shared_data('data'), 4)
        cnx.get_shared_data('data', pop=True)
        cnx.get_shared_data('whatever', pop=True)
        self.assertEquals(cnx.get_shared_data('data'), None)
        cnx.set_shared_data('data', 4)
        self.assertEquals(cnx.get_shared_data('data'), 4)
        self.restore_connection() # proper way to close cnx
        self.assertRaises(ConnectionError, cnx.check)
        self.assertRaises(ConnectionError, cnx.set_shared_data, 'data', 0)
        self.assertRaises(ConnectionError, cnx.get_shared_data, 'data')


# class DBAPICursorTC(EnvBasedTC):

#     @property
#     def cursor(self):
#         return self.env.cnx.cursor()

#     def test_api(self):
#         cu = self.cursor
#         self.assertEquals(cu.describe(1), (u'EGroup', u'system', None))
#         #cu.close()
#         #self.assertRaises(ConnectionError, cu.describe, 1)

if __name__ == '__main__':
    from logilab.common.testlib import unittest_main
    unittest_main()