devtools/testlib.py
changeset 9757 6eb7f361fba0
parent 9667 4714d4afd4ea
child 9790 0872ac2a1db0
equal deleted inserted replaced
9756:1fabbfff4a57 9757:6eb7f361fba0
   201 
   201 
   202     def __init__(self, repo, login, requestcls):
   202     def __init__(self, repo, login, requestcls):
   203         self._repo = repo
   203         self._repo = repo
   204         self._login = login
   204         self._login = login
   205         self.requestcls = requestcls
   205         self.requestcls = requestcls
   206         # opening session
   206         self._session = self._unsafe_connect(login)
   207         #
   207 
   208         # XXX this very hackish code should be cleaned and move on repo.
   208     def _unsafe_connect(self, login, **kwargs):
   209         with repo.internal_cnx() as cnx:
   209         """ a completely unsafe connect method for the tests """
   210             rset = cnx.execute('CWUser U WHERE U login %(u)s', {'u': login})
   210         # use an internal connection
   211             user = rset.get_entity(0, 0)
   211         with self._repo.internal_cnx() as cnx:
       
   212             # try to get a user object
       
   213             user = cnx.find('CWUser', login=login).one()
   212             user.groups
   214             user.groups
   213             user.properties
   215             user.properties
   214             self._session = Session(user, repo)
   216             user.login
   215             repo._sessions[self._session.sessionid] = self._session
   217             session = Session(user, self._repo)
   216             self._session.user._cw = self._session
   218             self._repo._sessions[session.sessionid] = session
       
   219             user._cw = user.cw_rset.req = session
       
   220         with session.new_cnx() as cnx:
       
   221             self._repo.hm.call_hooks('session_open', cnx)
       
   222             # commit connection at this point in case write operation has been
       
   223             # done during `session_open` hooks
       
   224             cnx.commit()
       
   225         return session
   217 
   226 
   218     @contextmanager
   227     @contextmanager
   219     def repo_cnx(self):
   228     def repo_cnx(self):
   220         """Context manager returning a server side connection for the user"""
   229         """Context manager returning a server side connection for the user"""
   221         with self._session.new_cnx() as cnx:
   230         with self._session.new_cnx() as cnx: