[testlib] complete the RepoAccess object (closes #3843614)
authorAurelien Campeas <aurelien.campeas@logilab.fr>
Fri, 30 May 2014 16:36:56 +0200
changeset 9757 6eb7f361fba0
parent 9756 1fabbfff4a57
child 9758 91f3cb7db2aa
[testlib] complete the RepoAccess object (closes #3843614) It was missing the open_session call.
devtools/testlib.py
server/repository.py
--- 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):
--- a/server/repository.py	Thu May 22 18:29:50 2014 +0200
+++ b/server/repository.py	Fri May 30 16:36:56 2014 +0200
@@ -652,7 +652,7 @@
             return rset.rows
 
     def connect(self, login, **kwargs):
-        """open a connection for a given user
+        """open a session for a given user
 
         raise `AuthenticationError` if the authentication failed
         raise `ConnectionError` if we can't open a connection