web/test/unittest_views_basecontrollers.py
changeset 8312 6c2119509fac
parent 8311 76a44a0d7f4b
child 8437 c9ab72f0645d
equal deleted inserted replaced
8311:76a44a0d7f4b 8312:6c2119509fac
    94             'login-subject:'+eid:     u(user.login),
    94             'login-subject:'+eid:     u(user.login),
    95             'surname-subject:'+eid: u'Th\xe9nault',
    95             'surname-subject:'+eid: u'Th\xe9nault',
    96             'firstname-subject:'+eid:   u'Sylvain',
    96             'firstname-subject:'+eid:   u'Sylvain',
    97             'in_group-subject:'+eid:  groups,
    97             'in_group-subject:'+eid:  groups,
    98             }
    98             }
    99         path, params = self.expect_redirect_publish(req, 'edit')
    99         path, params = self.expect_redirect_handle_request(req, 'edit')
   100         e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0)
   100         e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0)
   101         self.assertEqual(e.firstname, u'Sylvain')
   101         self.assertEqual(e.firstname, u'Sylvain')
   102         self.assertEqual(e.surname, u'Th\xe9nault')
   102         self.assertEqual(e.surname, u'Th\xe9nault')
   103         self.assertEqual(e.login, user.login)
   103         self.assertEqual(e.login, user.login)
   104         self.assertEqual([g.eid for g in e.in_group], groupeids)
   104         self.assertEqual([g.eid for g in e.in_group], groupeids)
   113             '__type:'+eid: 'CWUser',
   113             '__type:'+eid: 'CWUser',
   114             '_cw_entity_fields:'+eid: 'upassword-subject',
   114             '_cw_entity_fields:'+eid: 'upassword-subject',
   115             'upassword-subject:'+eid: 'tournicoton',
   115             'upassword-subject:'+eid: 'tournicoton',
   116             'upassword-subject-confirm:'+eid: 'tournicoton',
   116             'upassword-subject-confirm:'+eid: 'tournicoton',
   117             }
   117             }
   118         path, params = self.expect_redirect_publish(req, 'edit')
   118         path, params = self.expect_redirect_handle_request(req, 'edit')
   119         cnx.commit() # commit to check we don't get late validation error for instance
   119         cnx.commit() # commit to check we don't get late validation error for instance
   120         self.assertEqual(path, 'cwuser/user')
   120         self.assertEqual(path, 'cwuser/user')
   121         self.assertFalse('vid' in params)
   121         self.assertFalse('vid' in params)
   122 
   122 
   123     def test_user_editing_itself_no_relation(self):
   123     def test_user_editing_itself_no_relation(self):
   134             '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject',
   134             '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject',
   135             'login-subject:'+eid:     u(user.login),
   135             'login-subject:'+eid:     u(user.login),
   136             'firstname-subject:'+eid: u'Th\xe9nault',
   136             'firstname-subject:'+eid: u'Th\xe9nault',
   137             'surname-subject:'+eid:   u'Sylvain',
   137             'surname-subject:'+eid:   u'Sylvain',
   138             }
   138             }
   139         path, params = self.expect_redirect_publish(req, 'edit')
   139         path, params = self.expect_redirect_handle_request(req, 'edit')
   140         e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0)
   140         e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0)
   141         self.assertEqual(e.login, user.login)
   141         self.assertEqual(e.login, user.login)
   142         self.assertEqual(e.firstname, u'Th\xe9nault')
   142         self.assertEqual(e.firstname, u'Th\xe9nault')
   143         self.assertEqual(e.surname, u'Sylvain')
   143         self.assertEqual(e.surname, u'Sylvain')
   144         self.assertEqual([g.eid for g in e.in_group], groupeids)
   144         self.assertEqual([g.eid for g in e.in_group], groupeids)
   160                     '__type:Y': 'EmailAddress',
   160                     '__type:Y': 'EmailAddress',
   161                     '_cw_entity_fields:Y': 'address-subject,use_email-object',
   161                     '_cw_entity_fields:Y': 'address-subject,use_email-object',
   162                     'address-subject:Y': u'dima@logilab.fr',
   162                     'address-subject:Y': u'dima@logilab.fr',
   163                     'use_email-object:Y': 'X',
   163                     'use_email-object:Y': 'X',
   164                     }
   164                     }
   165         path, params = self.expect_redirect_publish(req, 'edit')
   165         path, params = self.expect_redirect_handle_request(req, 'edit')
   166         # should be redirected on the created person
   166         # should be redirected on the created person
   167         self.assertEqual(path, 'cwuser/adim')
   167         self.assertEqual(path, 'cwuser/adim')
   168         e = self.execute('Any P WHERE P surname "Di Mascio"').get_entity(0, 0)
   168         e = self.execute('Any P WHERE P surname "Di Mascio"').get_entity(0, 0)
   169         self.assertEqual(e.surname, 'Di Mascio')
   169         self.assertEqual(e.surname, 'Di Mascio')
   170         email = e.use_email[0]
   170         email = e.use_email[0]
   182                     '__type:Y': u'EmailAddress',
   182                     '__type:Y': u'EmailAddress',
   183                     '_cw_entity_fields:Y': u'address-subject,use_email-object',
   183                     '_cw_entity_fields:Y': u'address-subject,use_email-object',
   184                     'address-subject:Y': u'dima@logilab.fr',
   184                     'address-subject:Y': u'dima@logilab.fr',
   185                     'use_email-object:Y': peid,
   185                     'use_email-object:Y': peid,
   186                     }
   186                     }
   187         path, params = self.expect_redirect_publish(req, 'edit')
   187         path, params = self.expect_redirect_handle_request(req, 'edit')
   188         # should be redirected on the created person
   188         # should be redirected on the created person
   189         self.assertEqual(path, 'cwuser/adim')
   189         self.assertEqual(path, 'cwuser/adim')
   190         e = self.execute('Any P WHERE P surname "Di Masci"').get_entity(0, 0)
   190         e = self.execute('Any P WHERE P surname "Di Masci"').get_entity(0, 0)
   191         email = e.use_email[0]
   191         email = e.use_email[0]
   192         self.assertEqual(email.address, 'dima@logilab.fr')
   192         self.assertEqual(email.address, 'dima@logilab.fr')
   202                     '__type:'+emaileid: u'EmailAddress',
   202                     '__type:'+emaileid: u'EmailAddress',
   203                     '_cw_entity_fields:'+emaileid: u'address-subject,use_email-object',
   203                     '_cw_entity_fields:'+emaileid: u'address-subject,use_email-object',
   204                     'address-subject:'+emaileid: u'adim@logilab.fr',
   204                     'address-subject:'+emaileid: u'adim@logilab.fr',
   205                     'use_email-object:'+emaileid: peid,
   205                     'use_email-object:'+emaileid: peid,
   206                     }
   206                     }
   207         path, params = self.expect_redirect_publish(req, 'edit')
   207         path, params = self.expect_redirect_handle_request(req, 'edit')
   208         email.cw_clear_all_caches()
   208         email.cw_clear_all_caches()
   209         self.assertEqual(email.address, 'adim@logilab.fr')
   209         self.assertEqual(email.address, 'adim@logilab.fr')
   210 
   210 
   211 
   211 
   212     def test_password_confirm(self):
   212     def test_password_confirm(self):
   265                     '__type:X': 'Salesterm',
   265                     '__type:X': 'Salesterm',
   266                     '_cw_entity_fields:X': 'amount-subject,described_by_test-subject',
   266                     '_cw_entity_fields:X': 'amount-subject,described_by_test-subject',
   267                     'amount-subject:X': u'10',
   267                     'amount-subject:X': u'10',
   268                     'described_by_test-subject:X': u(feid),
   268                     'described_by_test-subject:X': u(feid),
   269                     }
   269                     }
   270         self.expect_redirect_publish(req, 'edit')
   270         self.expect_redirect_handle_request(req, 'edit')
   271         # should be redirected on the created
   271         # should be redirected on the created
   272         #eid = params['rql'].split()[-1]
   272         #eid = params['rql'].split()[-1]
   273         e = self.execute('Salesterm X').get_entity(0, 0)
   273         e = self.execute('Salesterm X').get_entity(0, 0)
   274         self.assertEqual(e.amount, 10)
   274         self.assertEqual(e.amount, 10)
   275 
   275 
   277         """make sure req's pending insertions are taken into account"""
   277         """make sure req's pending insertions are taken into account"""
   278         tmpgroup = self.request().create_entity('CWGroup', name=u"test")
   278         tmpgroup = self.request().create_entity('CWGroup', name=u"test")
   279         user = self.user()
   279         user = self.user()
   280         req = self.request(**req_form(user))
   280         req = self.request(**req_form(user))
   281         req.session.data['pending_insert'] = set([(user.eid, 'in_group', tmpgroup.eid)])
   281         req.session.data['pending_insert'] = set([(user.eid, 'in_group', tmpgroup.eid)])
   282         path, params = self.expect_redirect_publish(req, 'edit')
   282         path, params = self.expect_redirect_handle_request(req, 'edit')
   283         usergroups = [gname for gname, in
   283         usergroups = [gname for gname, in
   284                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   284                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   285         self.assertItemsEqual(usergroups, ['managers', 'test'])
   285         self.assertItemsEqual(usergroups, ['managers', 'test'])
   286         self.assertEqual(get_pending_inserts(req), [])
   286         self.assertEqual(get_pending_inserts(req), [])
   287 
   287 
   296         # just make sure everything was set correctly
   296         # just make sure everything was set correctly
   297         self.assertItemsEqual(usergroups, ['managers', 'test'])
   297         self.assertItemsEqual(usergroups, ['managers', 'test'])
   298         # now try to delete the relation
   298         # now try to delete the relation
   299         req = self.request(**req_form(user))
   299         req = self.request(**req_form(user))
   300         req.session.data['pending_delete'] = set([(user.eid, 'in_group', groupeid)])
   300         req.session.data['pending_delete'] = set([(user.eid, 'in_group', groupeid)])
   301         path, params = self.expect_redirect_publish(req, 'edit')
   301         path, params = self.expect_redirect_handle_request(req, 'edit')
   302         usergroups = [gname for gname, in
   302         usergroups = [gname for gname, in
   303                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   303                       self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})]
   304         self.assertItemsEqual(usergroups, ['managers'])
   304         self.assertItemsEqual(usergroups, ['managers'])
   305         self.assertEqual(get_pending_deletes(req), [])
   305         self.assertEqual(get_pending_deletes(req), [])
   306 
   306 
   316             '__redirectvid': 'primary',
   316             '__redirectvid': 'primary',
   317             '__redirectparams': 'toto=tutu&tata=titi',
   317             '__redirectparams': 'toto=tutu&tata=titi',
   318             '__form_id': 'edition',
   318             '__form_id': 'edition',
   319             '__action_apply': '',
   319             '__action_apply': '',
   320             }
   320             }
   321         path, params = self.expect_redirect_publish(req, 'edit')
   321         path, params = self.expect_redirect_handle_request(req, 'edit')
   322         self.assertTrue(path.startswith('blogentry/'))
   322         self.assertTrue(path.startswith('blogentry/'))
   323         eid = path.split('/')[1]
   323         eid = path.split('/')[1]
   324         self.assertEqual(params['vid'], 'edition')
   324         self.assertEqual(params['vid'], 'edition')
   325         self.assertNotEqual(int(eid), 4012)
   325         self.assertNotEqual(int(eid), 4012)
   326         self.assertEqual(params['__redirectrql'], redirectrql)
   326         self.assertEqual(params['__redirectrql'], redirectrql)
   338             '__redirectrql': redirectrql,
   338             '__redirectrql': redirectrql,
   339             '__redirectvid': 'primary',
   339             '__redirectvid': 'primary',
   340             '__redirectparams': 'toto=tutu&tata=titi',
   340             '__redirectparams': 'toto=tutu&tata=titi',
   341             '__form_id': 'edition',
   341             '__form_id': 'edition',
   342             }
   342             }
   343         path, params = self.expect_redirect_publish(req, 'edit')
   343         path, params = self.expect_redirect_handle_request(req, 'edit')
   344         self.assertEqual(path, 'view')
   344         self.assertEqual(path, 'view')
   345         self.assertEqual(params['rql'], redirectrql)
   345         self.assertEqual(params['rql'], redirectrql)
   346         self.assertEqual(params['vid'], 'primary')
   346         self.assertEqual(params['vid'], 'primary')
   347         self.assertEqual(params['tata'], 'titi')
   347         self.assertEqual(params['tata'], 'titi')
   348         self.assertEqual(params['toto'], 'tutu')
   348         self.assertEqual(params['toto'], 'tutu')
   350     def test_redirect_delete_button(self):
   350     def test_redirect_delete_button(self):
   351         req = self.request()
   351         req = self.request()
   352         eid = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid
   352         eid = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid
   353         req.form = {'eid': u(eid), '__type:%s'%eid: 'BlogEntry',
   353         req.form = {'eid': u(eid), '__type:%s'%eid: 'BlogEntry',
   354                     '__action_delete': ''}
   354                     '__action_delete': ''}
   355         path, params = self.expect_redirect_publish(req, 'edit')
   355         path, params = self.expect_redirect_handle_request(req, 'edit')
   356         self.assertEqual(path, 'blogentry')
   356         self.assertEqual(path, 'blogentry')
   357         self.assertIn('_cwmsgid', params)
   357         self.assertIn('_cwmsgid', params)
   358         eid = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid
   358         eid = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid
   359         self.execute('SET X use_email E WHERE E eid %(e)s, X eid %(x)s',
   359         self.execute('SET X use_email E WHERE E eid %(e)s, X eid %(x)s',
   360                      {'x': self.session.user.eid, 'e': eid})
   360                      {'x': self.session.user.eid, 'e': eid})
   361         self.commit()
   361         self.commit()
   362         req = req
   362         req = req
   363         req.form = {'eid': u(eid), '__type:%s'%eid: 'EmailAddress',
   363         req.form = {'eid': u(eid), '__type:%s'%eid: 'EmailAddress',
   364                     '__action_delete': ''}
   364                     '__action_delete': ''}
   365         path, params = self.expect_redirect_publish(req, 'edit')
   365         path, params = self.expect_redirect_handle_request(req, 'edit')
   366         self.assertEqual(path, 'cwuser/admin')
   366         self.assertEqual(path, 'cwuser/admin')
   367         self.assertIn('_cwmsgid', params)
   367         self.assertIn('_cwmsgid', params)
   368         eid1 = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid
   368         eid1 = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid
   369         eid2 = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid
   369         eid2 = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid
   370         req = self.request()
   370         req = self.request()
   371         req.form = {'eid': [u(eid1), u(eid2)],
   371         req.form = {'eid': [u(eid1), u(eid2)],
   372                     '__type:%s'%eid1: 'BlogEntry',
   372                     '__type:%s'%eid1: 'BlogEntry',
   373                     '__type:%s'%eid2: 'EmailAddress',
   373                     '__type:%s'%eid2: 'EmailAddress',
   374                     '__action_delete': ''}
   374                     '__action_delete': ''}
   375         path, params = self.expect_redirect_publish(req, 'edit')
   375         path, params = self.expect_redirect_handle_request(req, 'edit')
   376         self.assertEqual(path, 'view')
   376         self.assertEqual(path, 'view')
   377         self.assertIn('_cwmsgid', params)
   377         self.assertIn('_cwmsgid', params)
   378 
   378 
   379     def test_simple_copy(self):
   379     def test_simple_copy(self):
   380         req = self.request()
   380         req = self.request()
   386                     '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry',
   386                     '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry',
   387                     '_cw_entity_fields:X': 'title-subject,content-subject',
   387                     '_cw_entity_fields:X': 'title-subject,content-subject',
   388                     'title-subject:X': u'entry1-copy',
   388                     'title-subject:X': u'entry1-copy',
   389                     'content-subject:X': u'content1',
   389                     'content-subject:X': u'content1',
   390                     }
   390                     }
   391         self.expect_redirect_publish(req, 'edit')
   391         self.expect_redirect_handle_request(req, 'edit')
   392         blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy')
   392         blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy')
   393         self.assertEqual(blogentry2.entry_of[0].eid, blog.eid)
   393         self.assertEqual(blogentry2.entry_of[0].eid, blog.eid)
   394 
   394 
   395     def test_skip_copy_for(self):
   395     def test_skip_copy_for(self):
   396         req = self.request()
   396         req = self.request()
   404                         '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry',
   404                         '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry',
   405                         '_cw_entity_fields:X': 'title-subject,content-subject',
   405                         '_cw_entity_fields:X': 'title-subject,content-subject',
   406                         'title-subject:X': u'entry1-copy',
   406                         'title-subject:X': u'entry1-copy',
   407                         'content-subject:X': u'content1',
   407                         'content-subject:X': u'content1',
   408                         }
   408                         }
   409             self.expect_redirect_publish(req, 'edit')
   409             self.expect_redirect_handle_request(req, 'edit')
   410             blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy')
   410             blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy')
   411             # entry_of should not be copied
   411             # entry_of should not be copied
   412             self.assertEqual(len(blogentry2.entry_of), 0)
   412             self.assertEqual(len(blogentry2.entry_of), 0)
   413         finally:
   413         finally:
   414             blogentry.__class__.cw_skip_copy_for = []
   414             blogentry.__class__.cw_skip_copy_for = []
   430             'final-subject:'+cwetypeeid:    '',
   430             'final-subject:'+cwetypeeid:    '',
   431             'description-subject:'+cwetypeeid:     u'users group',
   431             'description-subject:'+cwetypeeid:     u'users group',
   432             'read_permission-subject:'+cwetypeeid:  groups,
   432             'read_permission-subject:'+cwetypeeid:  groups,
   433             }
   433             }
   434         try:
   434         try:
   435             path, params = self.expect_redirect_publish(req, 'edit')
   435             path, params = self.expect_redirect_handle_request(req, 'edit')
   436             e = self.execute('Any X WHERE X eid %(x)s', {'x': cwetypeeid}).get_entity(0, 0)
   436             e = self.execute('Any X WHERE X eid %(x)s', {'x': cwetypeeid}).get_entity(0, 0)
   437             self.assertEqual(e.name, 'CWEType')
   437             self.assertEqual(e.name, 'CWEType')
   438             self.assertEqual(sorted(g.eid for g in e.read_permission), groupeids)
   438             self.assertEqual(sorted(g.eid for g in e.read_permission), groupeids)
   439         finally:
   439         finally:
   440             # restore
   440             # restore
   450         req.form = {
   450         req.form = {
   451             'eid': 'A', '__maineid' : 'A',
   451             'eid': 'A', '__maineid' : 'A',
   452             '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'title-subject,content-subject',
   452             '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'title-subject,content-subject',
   453             'title-subject:A': u'"13:03:40"',
   453             'title-subject:A': u'"13:03:40"',
   454             'content-subject:A': u'"13:03:43"',}
   454             'content-subject:A': u'"13:03:43"',}
   455         path, params = self.expect_redirect_publish(req, 'edit')
   455         path, params = self.expect_redirect_handle_request(req, 'edit')
   456         self.assertTrue(path.startswith('blogentry/'))
   456         self.assertTrue(path.startswith('blogentry/'))
   457         eid = path.split('/')[1]
   457         eid = path.split('/')[1]
   458         e = self.execute('Any C, T WHERE C eid %(x)s, C content T', {'x': eid}).get_entity(0, 0)
   458         e = self.execute('Any C, T WHERE C eid %(x)s, C content T', {'x': eid}).get_entity(0, 0)
   459         self.assertEqual(e.title, '"13:03:40"')
   459         self.assertEqual(e.title, '"13:03:40"')
   460         self.assertEqual(e.content, '"13:03:43"')
   460         self.assertEqual(e.content, '"13:03:43"')
   488                     '__cloned_eid:X': user.eid, '__type:X': 'CWUser',
   488                     '__cloned_eid:X': user.eid, '__type:X': 'CWUser',
   489                     '_cw_entity_fields:X': 'login-subject,upassword-subject',
   489                     '_cw_entity_fields:X': 'login-subject,upassword-subject',
   490                     'login-subject:X': u'toto',
   490                     'login-subject:X': u'toto',
   491                     'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto',
   491                     'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto',
   492                     }
   492                     }
   493         path, params = self.expect_redirect_publish(req, 'edit')
   493         path, params = self.expect_redirect_handle_request(req, 'edit')
   494         self.assertEqual(path, 'cwuser/toto')
   494         self.assertEqual(path, 'cwuser/toto')
   495         e = self.execute('Any X WHERE X is CWUser, X login "toto"').get_entity(0, 0)
   495         e = self.execute('Any X WHERE X is CWUser, X login "toto"').get_entity(0, 0)
   496         self.assertEqual(e.login, 'toto')
   496         self.assertEqual(e.login, 'toto')
   497         self.assertEqual(e.in_group[0].name, 'managers')
   497         self.assertEqual(e.in_group[0].name, 'managers')
   498 
   498 
   518             # try to emulate what really happens in the web application
   518             # try to emulate what really happens in the web application
   519             # 1/ validate form => EditController.publish raises a ValidationError
   519             # 1/ validate form => EditController.publish raises a ValidationError
   520             #    which fires a Redirect
   520             #    which fires a Redirect
   521             # 2/ When re-publishing the copy form, the publisher implicitly commits
   521             # 2/ When re-publishing the copy form, the publisher implicitly commits
   522             try:
   522             try:
   523                 self.app_publish(req, 'edit')
   523                 self.app_handle_request(req, 'edit')
   524             except Redirect:
   524             except Redirect:
   525                 req = self.request()
   525                 req = self.request()
   526                 req.form['rql'] = 'Any X WHERE X eid %s' % p.eid
   526                 req.form['rql'] = 'Any X WHERE X eid %s' % p.eid
   527                 req.form['vid'] = 'copy'
   527                 req.form['vid'] = 'copy'
   528                 self.app_publish(req, 'view')
   528                 self.app_handle_request(req, 'view')
   529             rset = self.execute('CWUser P WHERE P surname "Boom"')
   529             rset = self.execute('CWUser P WHERE P surname "Boom"')
   530             self.assertEqual(len(rset), 0)
   530             self.assertEqual(len(rset), 0)
   531         finally:
   531         finally:
   532             p.__class__.skip_copy_for = old_skips
   532             p.__class__.skip_copy_for = old_skips
   533 
   533