web/test/unittest_views_basecontrollers.py
branchtls-sprint
changeset 1398 5fe84a5f7035
parent 0 b97547f5f1fa
child 1426 379261551578
equal deleted inserted replaced
1397:6cbc7bc8ea6d 1398:5fe84a5f7035
    11 from cubicweb.common.uilib import rql_for_eid
    11 from cubicweb.common.uilib import rql_for_eid
    12 
    12 
    13 from cubicweb.web import INTERNAL_FIELD_VALUE, Redirect, RequestError
    13 from cubicweb.web import INTERNAL_FIELD_VALUE, Redirect, RequestError
    14 from cubicweb.web.views.basecontrollers import xmlize
    14 from cubicweb.web.views.basecontrollers import xmlize
    15 
    15 
    16 from cubicweb.entities.authobjs import EUser
    16 from cubicweb.entities.authobjs import CWUser
    17 
    17 
    18 
    18 
    19 class EditControllerTC(ControllerTC):
    19 class EditControllerTC(ControllerTC):
    20     def setUp(self):
    20     def setUp(self):
    21         ControllerTC.setUp(self)
    21         ControllerTC.setUp(self)
    22         self.failUnless('users' in self.schema.eschema('EGroup').get_groups('read'))
    22         self.failUnless('users' in self.schema.eschema('CWGroup').get_groups('read'))
    23         
    23         
    24     def tearDown(self):
    24     def tearDown(self):
    25         ControllerTC.tearDown(self)
    25         ControllerTC.tearDown(self)
    26         self.failUnless('users' in self.schema.eschema('EGroup').get_groups('read'))
    26         self.failUnless('users' in self.schema.eschema('CWGroup').get_groups('read'))
    27         
    27         
    28     def test_noparam_edit(self):
    28     def test_noparam_edit(self):
    29         """check behaviour of this controller without any form parameter
    29         """check behaviour of this controller without any form parameter
    30         """
    30         """
    31         
    31         
    34         
    34         
    35     def test_validation_unique(self):
    35     def test_validation_unique(self):
    36         """test creation of two linked entities
    36         """test creation of two linked entities
    37         """        
    37         """        
    38         user = self.user()
    38         user = self.user()
    39         self.req.form = {'eid': 'X', '__type:X': 'EUser',
    39         self.req.form = {'eid': 'X', '__type:X': 'CWUser',
    40                          'login:X': u'admin', 'edits-login:X': u'', 
    40                          'login:X': u'admin', 'edits-login:X': u'', 
    41                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
    41                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
    42                          }
    42                          }
    43         self.assertRaises(ValidationError, self.publish, self.req)
    43         self.assertRaises(ValidationError, self.publish, self.req)
    44 
    44 
    45 
    45 
    46     def test_user_editing_itself(self):
    46     def test_user_editing_itself(self):
    47         """checking that a manager user can edit itself
    47         """checking that a manager user can edit itself
    48         """
    48         """
    49         user = self.user()
    49         user = self.user()
    50         basegroups = [str(eid) for eid, in self.execute('EGroup G WHERE X in_group G, X eid %(x)s', {'x': user.eid})]
    50         basegroups = [str(eid) for eid, in self.execute('CWGroup G WHERE X in_group G, X eid %(x)s', {'x': user.eid})]
    51         groupeids = [eid for eid, in self.execute('EGroup G WHERE G name in ("managers", "users")')]
    51         groupeids = [eid for eid, in self.execute('CWGroup G WHERE G name in ("managers", "users")')]
    52         groups = [str(eid) for eid in groupeids]
    52         groups = [str(eid) for eid in groupeids]
    53         stateeid = [eid for eid, in self.execute('State S WHERE S name "activated"')][0]
    53         stateeid = [eid for eid, in self.execute('State S WHERE S name "activated"')][0]
    54         self.req.form = {
    54         self.req.form = {
    55             'eid':       `user.eid`,
    55             'eid':       `user.eid`,
    56             '__type:'+`user.eid`:    'EUser',
    56             '__type:'+`user.eid`:    'CWUser',
    57             'login:'+`user.eid`:     unicode(user.login),
    57             'login:'+`user.eid`:     unicode(user.login),
    58             'firstname:'+`user.eid`: u'Th\xe9nault',
    58             'firstname:'+`user.eid`: u'Th\xe9nault',
    59             'surname:'+`user.eid`:   u'Sylvain',
    59             'surname:'+`user.eid`:   u'Sylvain',
    60             'in_group:'+`user.eid`:  groups,
    60             'in_group:'+`user.eid`:  groups,
    61             'in_state:'+`user.eid`:  `stateeid`,
    61             'in_state:'+`user.eid`:  `stateeid`,
    76 
    76 
    77     def test_user_can_change_its_password(self):
    77     def test_user_can_change_its_password(self):
    78         user = self.create_user('user')
    78         user = self.create_user('user')
    79         cnx = self.login('user')
    79         cnx = self.login('user')
    80         req = self.request()
    80         req = self.request()
    81         #self.assertEquals(self.ctrl.schema['EUser']._groups['read'],
    81         #self.assertEquals(self.ctrl.schema['CWUser']._groups['read'],
    82         #                  ('managers', 'users'))
    82         #                  ('managers', 'users'))
    83         req.form = {
    83         req.form = {
    84             'eid': `user.eid`, '__type:'+`user.eid`: 'EUser',
    84             'eid': `user.eid`, '__type:'+`user.eid`: 'CWUser',
    85             '__maineid' : str(user.eid),
    85             '__maineid' : str(user.eid),
    86             'upassword:'+`user.eid`: 'tournicoton',
    86             'upassword:'+`user.eid`: 'tournicoton',
    87             'upassword-confirm:'+`user.eid`: 'tournicoton',
    87             'upassword-confirm:'+`user.eid`: 'tournicoton',
    88             'edits-upassword:'+`user.eid`:  '',
    88             'edits-upassword:'+`user.eid`:  '',
    89             }
    89             }
    95     def testr_user_editing_itself_no_relation(self):
    95     def testr_user_editing_itself_no_relation(self):
    96         """checking we can edit an entity without specifying some required
    96         """checking we can edit an entity without specifying some required
    97         relations (meaning no changes)
    97         relations (meaning no changes)
    98         """
    98         """
    99         user = self.user()
    99         user = self.user()
   100         groupeids = [eid for eid, in self.execute('EGroup G WHERE X in_group G, X eid %(x)s', {'x': user.eid})]
   100         groupeids = [eid for eid, in self.execute('CWGroup G WHERE X in_group G, X eid %(x)s', {'x': user.eid})]
   101         self.req.form = {
   101         self.req.form = {
   102             'eid':       `user.eid`,
   102             'eid':       `user.eid`,
   103             '__type:'+`user.eid`:    'EUser',
   103             '__type:'+`user.eid`:    'CWUser',
   104             'login:'+`user.eid`:     unicode(user.login),
   104             'login:'+`user.eid`:     unicode(user.login),
   105             'firstname:'+`user.eid`: u'Th\xe9nault',
   105             'firstname:'+`user.eid`: u'Th\xe9nault',
   106             'surname:'+`user.eid`:   u'Sylvain',
   106             'surname:'+`user.eid`:   u'Sylvain',
   107             #
   107             #
   108             'edits-login:'+`user.eid`:     unicode(user.login),
   108             'edits-login:'+`user.eid`:     unicode(user.login),
   118         stateeids = [eid for eid, in self.execute('State S WHERE S name "activated"')]
   118         stateeids = [eid for eid, in self.execute('State S WHERE S name "activated"')]
   119         self.assertEquals([s.eid for s in e.in_state], stateeids)
   119         self.assertEquals([s.eid for s in e.in_state], stateeids)
   120         
   120         
   121         
   121         
   122     def test_create_multiple_linked(self):
   122     def test_create_multiple_linked(self):
   123         gueid = self.execute('EGroup G WHERE G name "users"')[0][0]
   123         gueid = self.execute('CWGroup G WHERE G name "users"')[0][0]
   124         self.req.form = {'eid': ['X', 'Y'],
   124         self.req.form = {'eid': ['X', 'Y'],
   125                          
   125                          
   126                          '__type:X': 'EUser',
   126                          '__type:X': 'CWUser',
   127                          '__maineid' : 'X',
   127                          '__maineid' : 'X',
   128                          'login:X': u'adim', 'edits-login:X': u'', 
   128                          'login:X': u'adim', 'edits-login:X': u'', 
   129                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
   129                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
   130                          'surname:X': u'Di Mascio', 'edits-surname:X': '',
   130                          'surname:X': u'Di Mascio', 'edits-surname:X': '',
   131 
   131 
   144         self.assertEquals(email.address, 'dima@logilab.fr')
   144         self.assertEquals(email.address, 'dima@logilab.fr')
   145         
   145         
   146     def test_edit_multiple_linked(self):
   146     def test_edit_multiple_linked(self):
   147         peid = self.create_user('adim').eid
   147         peid = self.create_user('adim').eid
   148         self.req.form = {'eid': [`peid`, 'Y'],
   148         self.req.form = {'eid': [`peid`, 'Y'],
   149                          '__type:%s'%peid: 'EUser',
   149                          '__type:%s'%peid: 'CWUser',
   150                          'surname:%s'%peid: u'Di Masci', 'edits-surname:%s'%peid: '',
   150                          'surname:%s'%peid: u'Di Masci', 'edits-surname:%s'%peid: '',
   151                          
   151                          
   152                          '__type:Y': 'EmailAddress',
   152                          '__type:Y': 'EmailAddress',
   153                          'address:Y': u'dima@logilab.fr', 'edits-address:Y': '',
   153                          'address:Y': u'dima@logilab.fr', 'edits-address:Y': '',
   154                          'use_email:%s'%peid: 'Y', 'edits-use_email:%s'%peid: INTERNAL_FIELD_VALUE,
   154                          'use_email:%s'%peid: 'Y', 'edits-use_email:%s'%peid: INTERNAL_FIELD_VALUE,
   163         email = e.use_email[0]
   163         email = e.use_email[0]
   164         self.assertEquals(email.address, 'dima@logilab.fr')
   164         self.assertEquals(email.address, 'dima@logilab.fr')
   165         
   165         
   166         emaileid = email.eid
   166         emaileid = email.eid
   167         self.req.form = {'eid': [`peid`, `emaileid`],
   167         self.req.form = {'eid': [`peid`, `emaileid`],
   168                          '__type:%s'%peid: 'EUser',
   168                          '__type:%s'%peid: 'CWUser',
   169                          'surname:%s'%peid: u'Di Masci', 'edits-surname:%s'%peid: 'Di Masci',
   169                          'surname:%s'%peid: u'Di Masci', 'edits-surname:%s'%peid: 'Di Masci',
   170                          '__type:%s'%emaileid: 'EmailAddress',
   170                          '__type:%s'%emaileid: 'EmailAddress',
   171                          'address:%s'%emaileid: u'adim@logilab.fr', 'edits-address:%s'%emaileid: 'dima@logilab.fr',
   171                          'address:%s'%emaileid: u'adim@logilab.fr', 'edits-address:%s'%emaileid: 'dima@logilab.fr',
   172                          'use_email:%s'%peid: `emaileid`, 'edits-use_email:%s'%peid: `emaileid`, 
   172                          'use_email:%s'%peid: `emaileid`, 'edits-use_email:%s'%peid: `emaileid`, 
   173                          '__redirectrql': 'Any X WHERE X eid %s'%peid,
   173                          '__redirectrql': 'Any X WHERE X eid %s'%peid,
   184     def test_password_confirm(self):
   184     def test_password_confirm(self):
   185         """test creation of two linked entities
   185         """test creation of two linked entities
   186         """        
   186         """        
   187         user = self.user()
   187         user = self.user()
   188         self.req.form = {'__cloned_eid:X': user.eid,
   188         self.req.form = {'__cloned_eid:X': user.eid,
   189                          'eid': 'X', '__type:X': 'EUser',
   189                          'eid': 'X', '__type:X': 'CWUser',
   190                          'login:X': u'toto', 'edits-login:X': u'', 
   190                          'login:X': u'toto', 'edits-login:X': u'', 
   191                          'upassword:X': u'toto', 'edits-upassword:X': u'', 
   191                          'upassword:X': u'toto', 'edits-upassword:X': u'', 
   192                          }
   192                          }
   193         self.assertRaises(ValidationError, self.publish, self.req)
   193         self.assertRaises(ValidationError, self.publish, self.req)
   194         self.req.form = {'__cloned_eid:X': user.eid,
   194         self.req.form = {'__cloned_eid:X': user.eid,
   195                          'eid': 'X', '__type:X': 'EUser',
   195                          'eid': 'X', '__type:X': 'CWUser',
   196                          'login:X': u'toto', 'edits-login:X': u'', 
   196                          'login:X': u'toto', 'edits-login:X': u'', 
   197                          'upassword:X': u'toto', 'upassword-confirm:X': u'tutu', 'edits-upassword:X': u'', 
   197                          'upassword:X': u'toto', 'upassword-confirm:X': u'tutu', 'edits-upassword:X': u'', 
   198                          }
   198                          }
   199         self.assertRaises(ValidationError, self.publish, self.req)
   199         self.assertRaises(ValidationError, self.publish, self.req)
   200 
   200 
   225         e = self.execute('Salesterm X').get_entity(0, 0)
   225         e = self.execute('Salesterm X').get_entity(0, 0)
   226         self.assertEquals(e.amount, 10)
   226         self.assertEquals(e.amount, 10)
   227 
   227 
   228     def test_req_pending_insert(self):
   228     def test_req_pending_insert(self):
   229         """make sure req's pending insertions are taken into account"""
   229         """make sure req's pending insertions are taken into account"""
   230         tmpgroup = self.add_entity('EGroup', name=u"test")
   230         tmpgroup = self.add_entity('CWGroup', name=u"test")
   231         user = self.user()
   231         user = self.user()
   232         self.req.set_session_data('pending_insert', set([(user.eid, 'in_group', tmpgroup.eid)]))
   232         self.req.set_session_data('pending_insert', set([(user.eid, 'in_group', tmpgroup.eid)]))
   233         path, params = self.expect_redirect_publish()
   233         path, params = self.expect_redirect_publish()
   234         usergroups = [gname for gname, in
   234         usergroups = [gname for gname, in
   235                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   235                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   238 
   238 
   239 
   239 
   240     def test_req_pending_delete(self):
   240     def test_req_pending_delete(self):
   241         """make sure req's pending deletions are taken into account"""
   241         """make sure req's pending deletions are taken into account"""
   242         user = self.user()
   242         user = self.user()
   243         groupeid = self.execute('INSERT EGroup G: G name "test", U in_group G WHERE U eid %(x)s',
   243         groupeid = self.execute('INSERT CWGroup G: G name "test", U in_group G WHERE U eid %(x)s',
   244                                 {'x': user.eid})[0][0]
   244                                 {'x': user.eid})[0][0]
   245         usergroups = [gname for gname, in
   245         usergroups = [gname for gname, in
   246                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   246                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   247         # just make sure everything was set correctly
   247         # just make sure everything was set correctly
   248         self.assertUnorderedIterableEquals(usergroups, ['managers', 'test'])
   248         self.assertUnorderedIterableEquals(usergroups, ['managers', 'test'])
   256 
   256 
   257     def test_custom_attribute_handler(self):
   257     def test_custom_attribute_handler(self):
   258         def custom_login_edit(self, formparams, value, relations):
   258         def custom_login_edit(self, formparams, value, relations):
   259             formparams['login'] = value.upper()
   259             formparams['login'] = value.upper()
   260             relations.append('X login %(login)s')
   260             relations.append('X login %(login)s')
   261         EUser.custom_login_edit = custom_login_edit
   261         CWUser.custom_login_edit = custom_login_edit
   262         try:
   262         try:
   263             user = self.user()
   263             user = self.user()
   264             eid = repr(user.eid)
   264             eid = repr(user.eid)
   265             self.req.form = {
   265             self.req.form = {
   266                 'eid': eid,
   266                 'eid': eid,
   267                 '__type:'+eid:  'EUser',
   267                 '__type:'+eid:  'CWUser',
   268                 'login:'+eid: u'foo',
   268                 'login:'+eid: u'foo',
   269                 'edits-login:'+eid:  unicode(user.login),
   269                 'edits-login:'+eid:  unicode(user.login),
   270                 }
   270                 }
   271             path, params = self.expect_redirect_publish()
   271             path, params = self.expect_redirect_publish()
   272             rset = self.execute('Any L WHERE X eid %(x)s, X login L', {'x': user.eid}, 'x')
   272             rset = self.execute('Any L WHERE X eid %(x)s, X login L', {'x': user.eid}, 'x')
   273             self.assertEquals(rset[0][0], 'FOO')
   273             self.assertEquals(rset[0][0], 'FOO')
   274         finally:
   274         finally:
   275             del EUser.custom_login_edit
   275             del CWUser.custom_login_edit
   276         
   276         
   277     def test_redirect_apply_button(self):
   277     def test_redirect_apply_button(self):
   278         redirectrql = rql_for_eid(4012) # whatever
   278         redirectrql = rql_for_eid(4012) # whatever
   279         self.req.form = {
   279         self.req.form = {
   280                          'eid': 'A', '__type:A': 'BlogEntry',
   280                          'eid': 'A', '__type:A': 'BlogEntry',
   340         path, params = self.expect_redirect_publish()
   340         path, params = self.expect_redirect_publish()
   341         self.assertEquals(path, 'view')
   341         self.assertEquals(path, 'view')
   342         self.assertEquals(params, {u'__message': u'entities deleted'})
   342         self.assertEquals(params, {u'__message': u'entities deleted'})
   343 
   343 
   344     def test_nonregr_egroup_etype_editing(self):
   344     def test_nonregr_egroup_etype_editing(self):
   345         """non-regression test checking that a manager user can edit a EEType entity (EGroup)
   345         """non-regression test checking that a manager user can edit a CWEType entity (CWGroup)
   346         """
   346         """
   347         groupeids = [eid for eid, in self.execute('EGroup G WHERE G name "managers"')]
   347         groupeids = [eid for eid, in self.execute('CWGroup G WHERE G name "managers"')]
   348         groups = [str(eid) for eid in groupeids]
   348         groups = [str(eid) for eid in groupeids]
   349         eeetypeeid = self.execute('EEType X WHERE X name "EGroup"')[0][0]
   349         eeetypeeid = self.execute('CWEType X WHERE X name "CWGroup"')[0][0]
   350         basegroups = [str(eid) for eid, in self.execute('EGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})]
   350         basegroups = [str(eid) for eid, in self.execute('CWGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})]
   351         self.req.form = {
   351         self.req.form = {
   352                 'eid':      `eeetypeeid`,
   352                 'eid':      `eeetypeeid`,
   353                 '__type:'+`eeetypeeid`:   'EEType',
   353                 '__type:'+`eeetypeeid`:   'CWEType',
   354                 'name:'+`eeetypeeid`:     u'EGroup',
   354                 'name:'+`eeetypeeid`:     u'CWGroup',
   355                 'final:'+`eeetypeeid`:    False,
   355                 'final:'+`eeetypeeid`:    False,
   356                 'meta:'+`eeetypeeid`:     True,
   356                 'meta:'+`eeetypeeid`:     True,
   357                 'description:'+`eeetypeeid`:     u'users group', 
   357                 'description:'+`eeetypeeid`:     u'users group', 
   358                 'read_permission:'+`eeetypeeid`:  groups,
   358                 'read_permission:'+`eeetypeeid`:  groups,
   359                 #
   359                 #
   360                 'edits-name:'+`eeetypeeid`:     u'EGroup',
   360                 'edits-name:'+`eeetypeeid`:     u'CWGroup',
   361                 'edits-final:'+`eeetypeeid`:    False,
   361                 'edits-final:'+`eeetypeeid`:    False,
   362                 'edits-meta:'+`eeetypeeid`:     True,
   362                 'edits-meta:'+`eeetypeeid`:     True,
   363                 'edits-description:'+`eeetypeeid`:     u'users group', 
   363                 'edits-description:'+`eeetypeeid`:     u'users group', 
   364                 'edits-read_permission:'+`eeetypeeid`:  basegroups,
   364                 'edits-read_permission:'+`eeetypeeid`:  basegroups,
   365                 }
   365                 }
   366         try:
   366         try:
   367             path, params = self.expect_redirect_publish()
   367             path, params = self.expect_redirect_publish()
   368             e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0)
   368             e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0)
   369             self.assertEquals(e.name, 'EGroup')
   369             self.assertEquals(e.name, 'CWGroup')
   370             self.assertEquals([g.eid for g in e.read_permission], groupeids)
   370             self.assertEquals([g.eid for g in e.read_permission], groupeids)
   371         finally:
   371         finally:
   372             # restore
   372             # restore
   373             self.execute('SET X read_permission Y WHERE X name "EGroup", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups)))
   373             self.execute('SET X read_permission Y WHERE X name "CWGroup", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups)))
   374             self.commit()
   374             self.commit()
   375             
   375             
   376     def test_nonregr_eetype_etype_editing(self):
   376     def test_nonregr_eetype_etype_editing(self):
   377         """non-regression test checking that a manager user can edit a EEType entity (EEType)
   377         """non-regression test checking that a manager user can edit a CWEType entity (CWEType)
   378         """
   378         """
   379         groupeids = sorted(eid for eid, in self.execute('EGroup G WHERE G name in ("managers", "users")'))
   379         groupeids = sorted(eid for eid, in self.execute('CWGroup G WHERE G name in ("managers", "users")'))
   380         groups = [str(eid) for eid in groupeids]
   380         groups = [str(eid) for eid in groupeids]
   381         eeetypeeid = self.execute('EEType X WHERE X name "EEType"')[0][0]
   381         eeetypeeid = self.execute('CWEType X WHERE X name "CWEType"')[0][0]
   382         basegroups = [str(eid) for eid, in self.execute('EGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})]
   382         basegroups = [str(eid) for eid, in self.execute('CWGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})]
   383         self.req.form = {
   383         self.req.form = {
   384                 'eid':      `eeetypeeid`,
   384                 'eid':      `eeetypeeid`,
   385                 '__type:'+`eeetypeeid`:  'EEType',
   385                 '__type:'+`eeetypeeid`:  'CWEType',
   386                 'name:'+`eeetypeeid`:     u'EEType',
   386                 'name:'+`eeetypeeid`:     u'CWEType',
   387                 'final:'+`eeetypeeid`:    False,
   387                 'final:'+`eeetypeeid`:    False,
   388                 'meta:'+`eeetypeeid`:     True,
   388                 'meta:'+`eeetypeeid`:     True,
   389                 'description:'+`eeetypeeid`:     u'users group', 
   389                 'description:'+`eeetypeeid`:     u'users group', 
   390                 'read_permission:'+`eeetypeeid`:  groups,
   390                 'read_permission:'+`eeetypeeid`:  groups,
   391 
   391 
   392                 'edits-name:'+`eeetypeeid`:     u'EEType',
   392                 'edits-name:'+`eeetypeeid`:     u'CWEType',
   393                 'edits-final:'+`eeetypeeid`:    False,
   393                 'edits-final:'+`eeetypeeid`:    False,
   394                 'edits-meta:'+`eeetypeeid`:     True,
   394                 'edits-meta:'+`eeetypeeid`:     True,
   395                 'edits-description:'+`eeetypeeid`:     u'users group', 
   395                 'edits-description:'+`eeetypeeid`:     u'users group', 
   396                 'edits-read_permission:'+`eeetypeeid`:  basegroups,
   396                 'edits-read_permission:'+`eeetypeeid`:  basegroups,
   397                 }
   397                 }
   398         try:
   398         try:
   399             path, params = self.expect_redirect_publish()
   399             path, params = self.expect_redirect_publish()
   400             e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0)
   400             e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0)
   401             self.assertEquals(e.name, 'EEType')
   401             self.assertEquals(e.name, 'CWEType')
   402             self.assertEquals(sorted(g.eid for g in e.read_permission), groupeids)
   402             self.assertEquals(sorted(g.eid for g in e.read_permission), groupeids)
   403         finally:
   403         finally:
   404             # restore
   404             # restore
   405             self.execute('SET X read_permission Y WHERE X name "EEType", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups)))
   405             self.execute('SET X read_permission Y WHERE X name "CWEType", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups)))
   406             self.commit()
   406             self.commit()
   407         
   407         
   408     def test_nonregr_strange_text_input(self):
   408     def test_nonregr_strange_text_input(self):
   409         """non-regression test checking text input containing "13:03:43"
   409         """non-regression test checking text input containing "13:03:43"
   410 
   410 
   422         self.assertEquals(e.title, '"13:03:40"')
   422         self.assertEquals(e.title, '"13:03:40"')
   423         self.assertEquals(e.content, '"13:03:43"')
   423         self.assertEquals(e.content, '"13:03:43"')
   424 
   424 
   425 
   425 
   426     def test_nonregr_multiple_empty_email_addr(self):
   426     def test_nonregr_multiple_empty_email_addr(self):
   427         gueid = self.execute('EGroup G WHERE G name "users"')[0][0]
   427         gueid = self.execute('CWGroup G WHERE G name "users"')[0][0]
   428         self.req.form = {'eid': ['X', 'Y'],
   428         self.req.form = {'eid': ['X', 'Y'],
   429                          
   429                          
   430                          '__type:X': 'EUser',
   430                          '__type:X': 'CWUser',
   431                          'login:X': u'adim', 'edits-login:X': u'', 
   431                          'login:X': u'adim', 'edits-login:X': u'', 
   432                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
   432                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
   433                          'in_group:X': `gueid`, 'edits-in_group:X': INTERNAL_FIELD_VALUE, 
   433                          'in_group:X': `gueid`, 'edits-in_group:X': INTERNAL_FIELD_VALUE, 
   434                          
   434                          
   435                          '__type:Y': 'EmailAddress',
   435                          '__type:Y': 'EmailAddress',
   440         self.assertRaises(ValidationError, self.publish, self.req)
   440         self.assertRaises(ValidationError, self.publish, self.req)
   441 
   441 
   442     def test_nonregr_copy(self):
   442     def test_nonregr_copy(self):
   443         user = self.user()
   443         user = self.user()
   444         self.req.form = {'__cloned_eid:X': user.eid,
   444         self.req.form = {'__cloned_eid:X': user.eid,
   445                          'eid': 'X', '__type:X': 'EUser',
   445                          'eid': 'X', '__type:X': 'CWUser',
   446                          '__maineid' : 'X',
   446                          '__maineid' : 'X',
   447                          'login:X': u'toto', 'edits-login:X': u'', 
   447                          'login:X': u'toto', 'edits-login:X': u'', 
   448                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
   448                          'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', 
   449                          }
   449                          }
   450         path, params = self.expect_redirect_publish()
   450         path, params = self.expect_redirect_publish()
   451         self.assertEquals(path, 'euser/toto')
   451         self.assertEquals(path, 'euser/toto')
   452         e = self.execute('Any X WHERE X is EUser, X login "toto"').get_entity(0, 0)
   452         e = self.execute('Any X WHERE X is CWUser, X login "toto"').get_entity(0, 0)
   453         self.assertEquals(e.login, 'toto')
   453         self.assertEquals(e.login, 'toto')
   454         self.assertEquals(e.in_group[0].name, 'managers')
   454         self.assertEquals(e.in_group[0].name, 'managers')
   455 
   455 
   456 
   456 
   457     def test_nonregr_rollback_on_validation_error(self):
   457     def test_nonregr_rollback_on_validation_error(self):
   462         try:
   462         try:
   463             e = self.add_entity('EmailAddress', address=u'doe@doe.com')
   463             e = self.add_entity('EmailAddress', address=u'doe@doe.com')
   464             self.execute('SET P use_email E, P primary_email E WHERE P eid %(p)s, E eid %(e)s',
   464             self.execute('SET P use_email E, P primary_email E WHERE P eid %(p)s, E eid %(e)s',
   465                          {'p' : p.eid, 'e' : e.eid})
   465                          {'p' : p.eid, 'e' : e.eid})
   466             self.req.form = {'__cloned_eid:X': p.eid,
   466             self.req.form = {'__cloned_eid:X': p.eid,
   467                              'eid': 'X', '__type:X': 'EUser',
   467                              'eid': 'X', '__type:X': 'CWUser',
   468                              'login': u'dodo', 'edits-login': u'dodo', 
   468                              'login': u'dodo', 'edits-login': u'dodo', 
   469                              'surname:X': u'Boom', 'edits-surname:X': u'',
   469                              'surname:X': u'Boom', 'edits-surname:X': u'',
   470                              '__errorurl' : "whatever but required",
   470                              '__errorurl' : "whatever but required",
   471                              }
   471                              }
   472             # try to emulate what really happens in the web application
   472             # try to emulate what really happens in the web application
   477                 self.env.app.publish('edit', self.req)
   477                 self.env.app.publish('edit', self.req)
   478             except Redirect:
   478             except Redirect:
   479                 self.req.form['rql'] = 'Any X WHERE X eid %s' % p.eid
   479                 self.req.form['rql'] = 'Any X WHERE X eid %s' % p.eid
   480                 self.req.form['vid'] = 'copy'
   480                 self.req.form['vid'] = 'copy'
   481                 self.env.app.publish('view', self.req)
   481                 self.env.app.publish('view', self.req)
   482             rset = self.execute('EUser P WHERE P surname "Boom"')
   482             rset = self.execute('CWUser P WHERE P surname "Boom"')
   483             self.assertEquals(len(rset), 0)
   483             self.assertEquals(len(rset), 0)
   484         finally:
   484         finally:
   485             p.__class__.skip_copy_for = old_skips
   485             p.__class__.skip_copy_for = old_skips
   486 
   486 
   487 
   487 
   525         self.john = self.create_user(u'John')
   525         self.john = self.create_user(u'John')
   526 
   526 
   527 
   527 
   528     ## tests ##################################################################
   528     ## tests ##################################################################
   529     def test_simple_exec(self):
   529     def test_simple_exec(self):
   530         ctrl = self.ctrl(self.request(rql='EUser P WHERE P login "John"',
   530         ctrl = self.ctrl(self.request(rql='CWUser P WHERE P login "John"',
   531                                       pageid='123'))
   531                                       pageid='123'))
   532         self.assertTextEquals(ctrl.publish(),
   532         self.assertTextEquals(ctrl.publish(),
   533                               xmlize(self.john.view('primary')))
   533                               xmlize(self.john.view('primary')))
   534 
   534 
   535     def test_json_exec(self):
   535     def test_json_exec(self):
   540 
   540 
   541     def test_remote_add_existing_tag(self):
   541     def test_remote_add_existing_tag(self):
   542         self.remote_call('tag_entity', self.john.eid, ['python'])
   542         self.remote_call('tag_entity', self.john.eid, ['python'])
   543         self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')],
   543         self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')],
   544                              ['python', 'cubicweb'])
   544                              ['python', 'cubicweb'])
   545         self.assertEquals(self.execute('Any N WHERE T tags P, P is EUser, T name N').rows,
   545         self.assertEquals(self.execute('Any N WHERE T tags P, P is CWUser, T name N').rows,
   546                           [['python']])
   546                           [['python']])
   547     
   547     
   548     def test_remote_add_new_tag(self):
   548     def test_remote_add_new_tag(self):
   549         self.remote_call('tag_entity', self.john.eid, ['javascript'])
   549         self.remote_call('tag_entity', self.john.eid, ['javascript'])
   550         self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')],
   550         self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')],
   551                              ['python', 'cubicweb', 'javascript'])
   551                              ['python', 'cubicweb', 'javascript'])
   552         self.assertEquals(self.execute('Any N WHERE T tags P, P is EUser, T name N').rows,
   552         self.assertEquals(self.execute('Any N WHERE T tags P, P is CWUser, T name N').rows,
   553                           [['javascript']])
   553                           [['javascript']])
   554 
   554 
   555     def test_edit_field(self):
   555     def test_edit_field(self):
   556         nbusers = len(self.execute('EUser P'))
   556         nbusers = len(self.execute('CWUser P'))
   557         eid = self.john.eid
   557         eid = self.john.eid
   558         self.remote_call('edit_field', 'apply',
   558         self.remote_call('edit_field', 'apply',
   559                          ('eid', 'firstname:%s' % eid, '__maineid', '__type:%s'% eid, 'edits-firstname:%s' % eid ),
   559                          ('eid', 'firstname:%s' % eid, '__maineid', '__type:%s'% eid, 'edits-firstname:%s' % eid ),
   560                          (str(eid), u'Remi', str(eid), 'EUser', self.john.firstname),
   560                          (str(eid), u'Remi', str(eid), 'CWUser', self.john.firstname),
   561                          'firstname',
   561                          'firstname',
   562                          eid)
   562                          eid)
   563         self.commit()
   563         self.commit()
   564         rset = self.execute('EUser P')
   564         rset = self.execute('CWUser P')
   565         # make sure we did not insert a new euser here
   565         # make sure we did not insert a new euser here
   566         self.assertEquals(len(rset), nbusers)
   566         self.assertEquals(len(rset), nbusers)
   567         john = self.execute('Any X WHERE X eid %(x)s', {'x': self.john.eid}, 'x').get_entity(0, 0)
   567         john = self.execute('Any X WHERE X eid %(x)s', {'x': self.john.eid}, 'x').get_entity(0, 0)
   568         self.assertEquals(john.eid, self.john.eid)
   568         self.assertEquals(john.eid, self.john.eid)
   569         self.assertEquals(john.firstname, 'Remi')
   569         self.assertEquals(john.firstname, 'Remi')