cubicweb/pyramid/test/test_tools.py
author Philippe Pepiot <ph@itsalwaysdns.eu>
Tue, 31 Mar 2020 19:15:03 +0200
changeset 12957 0c973204033a
parent 11631 faf279e33298
permissions -rw-r--r--
[server] prevent returning closed cursor to the database pool In since c8c6ad8 init_repository use repo.internal_cnx() instead of repo.system_source.get_connection() so it use the pool and we should not close cursors from the pool before returning it back. Otherwise we may have "connection already closed" error. This bug only trigger when connection-pool-size = 1. Since we are moving to use a dynamic pooler we need to get this fixed. This does not occur with sqlite since the connection wrapper instantiate new cursor everytime, but this occur with other databases.

from cubicweb.pyramid.test import PyramidCWTest
from cubicweb.pyramid import tools


class ToolsTest(PyramidCWTest):
    anonymous_allowed = True

    def test_clone_user(self):
        with self.admin_access.repo_cnx() as cnx:
            user = cnx.find('CWUser', login='anon').one()
            user.login  # fill the cache
            clone = tools.clone_user(self.repo, user)

            self.assertEqual(clone.eid, user.eid)
            self.assertEqual(clone.login, user.login)

            self.assertEqual(clone.cw_rset.rows, user.cw_rset.rows)
            self.assertEqual(clone.cw_rset.rql, user.cw_rset.rql)

    def test_cnx_attach_entity(self):
        with self.admin_access.repo_cnx() as cnx:
            user = cnx.find('CWUser', login='anon').one()

        with self.admin_access.repo_cnx() as cnx:
            tools.cnx_attach_entity(cnx, user)
            self.assertEqual(user.login, 'anon')


if __name__ == '__main__':
    from unittest import main
    main()