devtools/testlib.py
changeset 9757 6eb7f361fba0
parent 9667 4714d4afd4ea
child 9790 0872ac2a1db0
--- a/devtools/testlib.py	Thu May 22 18:29:50 2014 +0200
+++ b/devtools/testlib.py	Fri May 30 16:36:56 2014 +0200
@@ -203,17 +203,26 @@
         self._repo = repo
         self._login = login
         self.requestcls = requestcls
-        # opening session
-        #
-        # XXX this very hackish code should be cleaned and move on repo.
-        with repo.internal_cnx() as cnx:
-            rset = cnx.execute('CWUser U WHERE U login %(u)s', {'u': login})
-            user = rset.get_entity(0, 0)
+        self._session = self._unsafe_connect(login)
+
+    def _unsafe_connect(self, login, **kwargs):
+        """ a completely unsafe connect method for the tests """
+        # use an internal connection
+        with self._repo.internal_cnx() as cnx:
+            # try to get a user object
+            user = cnx.find('CWUser', login=login).one()
             user.groups
             user.properties
-            self._session = Session(user, repo)
-            repo._sessions[self._session.sessionid] = self._session
-            self._session.user._cw = self._session
+            user.login
+            session = Session(user, self._repo)
+            self._repo._sessions[session.sessionid] = session
+            user._cw = user.cw_rset.req = session
+        with session.new_cnx() as cnx:
+            self._repo.hm.call_hooks('session_open', cnx)
+            # commit connection at this point in case write operation has been
+            # done during `session_open` hooks
+            cnx.commit()
+        return session
 
     @contextmanager
     def repo_cnx(self):