57 """test creation of two linked entities |
57 """test creation of two linked entities |
58 """ |
58 """ |
59 user = self.user() |
59 user = self.user() |
60 req = self.request() |
60 req = self.request() |
61 req.form = {'eid': 'X', '__type:X': 'CWUser', |
61 req.form = {'eid': 'X', '__type:X': 'CWUser', |
62 '_cw_edited_fields:X': 'login-subject,upassword-subject', |
62 '_cw_entity_fields:X': 'login-subject,upassword-subject', |
63 'login-subject:X': u'admin', |
63 'login-subject:X': u'admin', |
64 'upassword-subject:X': u'toto', |
64 'upassword-subject:X': u'toto', |
65 'upassword-subject-confirm:X': u'toto', |
65 'upassword-subject-confirm:X': u'toto', |
66 } |
66 } |
67 with self.assertRaises(ValidationError) as cm: |
67 with self.assertRaises(ValidationError) as cm: |
77 groups = [u(eid) for eid in groupeids] |
77 groups = [u(eid) for eid in groupeids] |
78 req = self.request() |
78 req = self.request() |
79 eid = u(user.eid) |
79 eid = u(user.eid) |
80 req.form = { |
80 req.form = { |
81 'eid': eid, '__type:'+eid: 'CWUser', |
81 'eid': eid, '__type:'+eid: 'CWUser', |
82 '_cw_edited_fields:'+eid: 'login-subject,firstname-subject,surname-subject,in_group-subject', |
82 '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject,in_group-subject', |
83 'login-subject:'+eid: u(user.login), |
83 'login-subject:'+eid: u(user.login), |
84 'surname-subject:'+eid: u'Th\xe9nault', |
84 'surname-subject:'+eid: u'Th\xe9nault', |
85 'firstname-subject:'+eid: u'Sylvain', |
85 'firstname-subject:'+eid: u'Sylvain', |
86 'in_group-subject:'+eid: groups, |
86 'in_group-subject:'+eid: groups, |
87 } |
87 } |
98 cnx = self.login('user') |
98 cnx = self.login('user') |
99 eid = u(user.eid) |
99 eid = u(user.eid) |
100 req.form = { |
100 req.form = { |
101 'eid': eid, '__maineid' : eid, |
101 'eid': eid, '__maineid' : eid, |
102 '__type:'+eid: 'CWUser', |
102 '__type:'+eid: 'CWUser', |
103 '_cw_edited_fields:'+eid: 'upassword-subject', |
103 '_cw_entity_fields:'+eid: 'upassword-subject', |
104 'upassword-subject:'+eid: 'tournicoton', |
104 'upassword-subject:'+eid: 'tournicoton', |
105 'upassword-subject-confirm:'+eid: 'tournicoton', |
105 'upassword-subject-confirm:'+eid: 'tournicoton', |
106 } |
106 } |
107 path, params = self.expect_redirect_publish(req, 'edit') |
107 path, params = self.expect_redirect_publish(req, 'edit') |
108 cnx.commit() # commit to check we don't get late validation error for instance |
108 cnx.commit() # commit to check we don't get late validation error for instance |
118 req = self.request() |
118 req = self.request() |
119 eid = u(user.eid) |
119 eid = u(user.eid) |
120 req.form = { |
120 req.form = { |
121 'eid': eid, |
121 'eid': eid, |
122 '__type:'+eid: 'CWUser', |
122 '__type:'+eid: 'CWUser', |
123 '_cw_edited_fields:'+eid: 'login-subject,firstname-subject,surname-subject', |
123 '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject', |
124 'login-subject:'+eid: u(user.login), |
124 'login-subject:'+eid: u(user.login), |
125 'firstname-subject:'+eid: u'Th\xe9nault', |
125 'firstname-subject:'+eid: u'Th\xe9nault', |
126 'surname-subject:'+eid: u'Sylvain', |
126 'surname-subject:'+eid: u'Sylvain', |
127 } |
127 } |
128 path, params = self.expect_redirect_publish(req, 'edit') |
128 path, params = self.expect_redirect_publish(req, 'edit') |
138 gueid = self.execute('CWGroup G WHERE G name "users"')[0][0] |
138 gueid = self.execute('CWGroup G WHERE G name "users"')[0][0] |
139 req = self.request() |
139 req = self.request() |
140 req.form = {'eid': ['X', 'Y'], '__maineid' : 'X', |
140 req.form = {'eid': ['X', 'Y'], '__maineid' : 'X', |
141 |
141 |
142 '__type:X': 'CWUser', |
142 '__type:X': 'CWUser', |
143 '_cw_edited_fields:X': 'login-subject,upassword-subject,surname-subject,in_group-subject', |
143 '_cw_entity_fields:X': 'login-subject,upassword-subject,surname-subject,in_group-subject', |
144 'login-subject:X': u'adim', |
144 'login-subject:X': u'adim', |
145 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
145 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
146 'surname-subject:X': u'Di Mascio', |
146 'surname-subject:X': u'Di Mascio', |
147 'in_group-subject:X': u(gueid), |
147 'in_group-subject:X': u(gueid), |
148 |
148 |
149 '__type:Y': 'EmailAddress', |
149 '__type:Y': 'EmailAddress', |
150 '_cw_edited_fields:Y': 'address-subject,use_email-object', |
150 '_cw_entity_fields:Y': 'address-subject,use_email-object', |
151 'address-subject:Y': u'dima@logilab.fr', |
151 'address-subject:Y': u'dima@logilab.fr', |
152 'use_email-object:Y': 'X', |
152 'use_email-object:Y': 'X', |
153 } |
153 } |
154 path, params = self.expect_redirect_publish(req, 'edit') |
154 path, params = self.expect_redirect_publish(req, 'edit') |
155 # should be redirected on the created person |
155 # should be redirected on the created person |
163 req = self.request() |
163 req = self.request() |
164 peid = u(self.create_user(req, 'adim').eid) |
164 peid = u(self.create_user(req, 'adim').eid) |
165 req.form = {'eid': [peid, 'Y'], '__maineid': peid, |
165 req.form = {'eid': [peid, 'Y'], '__maineid': peid, |
166 |
166 |
167 '__type:'+peid: u'CWUser', |
167 '__type:'+peid: u'CWUser', |
168 '_cw_edited_fields:'+peid: u'surname-subject', |
168 '_cw_entity_fields:'+peid: u'surname-subject', |
169 'surname-subject:'+peid: u'Di Masci', |
169 'surname-subject:'+peid: u'Di Masci', |
170 |
170 |
171 '__type:Y': u'EmailAddress', |
171 '__type:Y': u'EmailAddress', |
172 '_cw_edited_fields:Y': u'address-subject,use_email-object', |
172 '_cw_entity_fields:Y': u'address-subject,use_email-object', |
173 'address-subject:Y': u'dima@logilab.fr', |
173 'address-subject:Y': u'dima@logilab.fr', |
174 'use_email-object:Y': peid, |
174 'use_email-object:Y': peid, |
175 } |
175 } |
176 path, params = self.expect_redirect_publish(req, 'edit') |
176 path, params = self.expect_redirect_publish(req, 'edit') |
177 # should be redirected on the created person |
177 # should be redirected on the created person |
183 emaileid = u(email.eid) |
183 emaileid = u(email.eid) |
184 req = self.request() |
184 req = self.request() |
185 req.form = {'eid': [peid, emaileid], |
185 req.form = {'eid': [peid, emaileid], |
186 |
186 |
187 '__type:'+peid: u'CWUser', |
187 '__type:'+peid: u'CWUser', |
188 '_cw_edited_fields:'+peid: u'surname-subject', |
188 '_cw_entity_fields:'+peid: u'surname-subject', |
189 'surname-subject:'+peid: u'Di Masci', |
189 'surname-subject:'+peid: u'Di Masci', |
190 |
190 |
191 '__type:'+emaileid: u'EmailAddress', |
191 '__type:'+emaileid: u'EmailAddress', |
192 '_cw_edited_fields:'+emaileid: u'address-subject,use_email-object', |
192 '_cw_entity_fields:'+emaileid: u'address-subject,use_email-object', |
193 'address-subject:'+emaileid: u'adim@logilab.fr', |
193 'address-subject:'+emaileid: u'adim@logilab.fr', |
194 'use_email-object:'+emaileid: peid, |
194 'use_email-object:'+emaileid: peid, |
195 } |
195 } |
196 path, params = self.expect_redirect_publish(req, 'edit') |
196 path, params = self.expect_redirect_publish(req, 'edit') |
197 email.clear_all_caches() |
197 email.cw_clear_all_caches() |
198 self.assertEqual(email.address, 'adim@logilab.fr') |
198 self.assertEqual(email.address, 'adim@logilab.fr') |
199 |
199 |
200 |
200 |
201 def test_password_confirm(self): |
201 def test_password_confirm(self): |
202 """test creation of two linked entities |
202 """test creation of two linked entities |
203 """ |
203 """ |
204 user = self.user() |
204 user = self.user() |
205 req = self.request() |
205 req = self.request() |
206 req.form = {'eid': 'X', |
206 req.form = {'eid': 'X', |
207 '__cloned_eid:X': u(user.eid), '__type:X': 'CWUser', |
207 '__cloned_eid:X': u(user.eid), '__type:X': 'CWUser', |
208 '_cw_edited_fields:X': 'login-subject,upassword-subject', |
208 '_cw_entity_fields:X': 'login-subject,upassword-subject', |
209 'login-subject:X': u'toto', |
209 'login-subject:X': u'toto', |
210 'upassword-subject:X': u'toto', |
210 'upassword-subject:X': u'toto', |
211 } |
211 } |
212 with self.assertRaises(ValidationError) as cm: |
212 with self.assertRaises(ValidationError) as cm: |
213 self.ctrl_publish(req) |
213 self.ctrl_publish(req) |
214 self.assertEqual(cm.exception.errors, {'upassword-subject': u'password and confirmation don\'t match'}) |
214 self.assertEqual(cm.exception.errors, {'upassword-subject': u'password and confirmation don\'t match'}) |
215 req = self.request() |
215 req = self.request() |
216 req.form = {'__cloned_eid:X': u(user.eid), |
216 req.form = {'__cloned_eid:X': u(user.eid), |
217 'eid': 'X', '__type:X': 'CWUser', |
217 'eid': 'X', '__type:X': 'CWUser', |
218 '_cw_edited_fields:X': 'login-subject,upassword-subject', |
218 '_cw_entity_fields:X': 'login-subject,upassword-subject', |
219 'login-subject:X': u'toto', |
219 'login-subject:X': u'toto', |
220 'upassword-subject:X': u'toto', |
220 'upassword-subject:X': u'toto', |
221 'upassword-subject-confirm:X': u'tutu', |
221 'upassword-subject-confirm:X': u'tutu', |
222 } |
222 } |
223 with self.assertRaises(ValidationError) as cm: |
223 with self.assertRaises(ValidationError) as cm: |
230 {'data': Binary('yo')})[0][0] |
230 {'data': Binary('yo')})[0][0] |
231 self.commit() |
231 self.commit() |
232 req = self.request(rollbackfirst=True) |
232 req = self.request(rollbackfirst=True) |
233 req.form = {'eid': ['X'], |
233 req.form = {'eid': ['X'], |
234 '__type:X': 'Salesterm', |
234 '__type:X': 'Salesterm', |
235 '_cw_edited_fields:X': 'amount-subject,described_by_test-subject', |
235 '_cw_entity_fields:X': 'amount-subject,described_by_test-subject', |
236 'amount-subject:X': u'-10', |
236 'amount-subject:X': u'-10', |
237 'described_by_test-subject:X': u(feid), |
237 'described_by_test-subject:X': u(feid), |
238 } |
238 } |
239 with self.assertRaises(ValidationError) as cm: |
239 with self.assertRaises(ValidationError) as cm: |
240 self.ctrl_publish(req) |
240 self.ctrl_publish(req) |
241 self.assertEqual(cm.exception.errors, {'amount-subject': 'value must be >= 0'}) |
241 self.assertEqual(cm.exception.errors, {'amount-subject': 'value -10 must be >= 0'}) |
242 req = self.request(rollbackfirst=True) |
242 req = self.request(rollbackfirst=True) |
243 req.form = {'eid': ['X'], |
243 req.form = {'eid': ['X'], |
244 '__type:X': 'Salesterm', |
244 '__type:X': 'Salesterm', |
245 '_cw_edited_fields:X': 'amount-subject,described_by_test-subject', |
245 '_cw_entity_fields:X': 'amount-subject,described_by_test-subject', |
246 'amount-subject:X': u'110', |
246 'amount-subject:X': u'110', |
247 'described_by_test-subject:X': u(feid), |
247 'described_by_test-subject:X': u(feid), |
248 } |
248 } |
249 with self.assertRaises(ValidationError) as cm: |
249 with self.assertRaises(ValidationError) as cm: |
250 self.ctrl_publish(req) |
250 self.ctrl_publish(req) |
251 self.assertEqual(cm.exception.errors, {'amount-subject': 'value must be <= 100'}) |
251 self.assertEqual(cm.exception.errors, {'amount-subject': 'value 110 must be <= 100'}) |
252 req = self.request(rollbackfirst=True) |
252 req = self.request(rollbackfirst=True) |
253 req.form = {'eid': ['X'], |
253 req.form = {'eid': ['X'], |
254 '__type:X': 'Salesterm', |
254 '__type:X': 'Salesterm', |
255 '_cw_edited_fields:X': 'amount-subject,described_by_test-subject', |
255 '_cw_entity_fields:X': 'amount-subject,described_by_test-subject', |
256 'amount-subject:X': u'10', |
256 'amount-subject:X': u'10', |
257 'described_by_test-subject:X': u(feid), |
257 'described_by_test-subject:X': u(feid), |
258 } |
258 } |
259 self.expect_redirect_publish(req, 'edit') |
259 self.expect_redirect_publish(req, 'edit') |
260 # should be redirected on the created |
260 # should be redirected on the created |
296 def test_redirect_apply_button(self): |
296 def test_redirect_apply_button(self): |
297 redirectrql = rql_for_eid(4012) # whatever |
297 redirectrql = rql_for_eid(4012) # whatever |
298 req = self.request() |
298 req = self.request() |
299 req.form = { |
299 req.form = { |
300 'eid': 'A', '__maineid' : 'A', |
300 'eid': 'A', '__maineid' : 'A', |
301 '__type:A': 'BlogEntry', '_cw_edited_fields:A': 'content-subject,title-subject', |
301 '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'content-subject,title-subject', |
302 'content-subject:A': u'"13:03:43"', |
302 'content-subject:A': u'"13:03:43"', |
303 'title-subject:A': u'huuu', |
303 'title-subject:A': u'huuu', |
304 '__redirectrql': redirectrql, |
304 '__redirectrql': redirectrql, |
305 '__redirectvid': 'primary', |
305 '__redirectvid': 'primary', |
306 '__redirectparams': 'toto=tutu&tata=titi', |
306 '__redirectparams': 'toto=tutu&tata=titi', |
319 def test_redirect_ok_button(self): |
319 def test_redirect_ok_button(self): |
320 redirectrql = rql_for_eid(4012) # whatever |
320 redirectrql = rql_for_eid(4012) # whatever |
321 req = self.request() |
321 req = self.request() |
322 req.form = { |
322 req.form = { |
323 'eid': 'A', '__maineid' : 'A', |
323 'eid': 'A', '__maineid' : 'A', |
324 '__type:A': 'BlogEntry', '_cw_edited_fields:A': 'content-subject,title-subject', |
324 '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'content-subject,title-subject', |
325 'content-subject:A': u'"13:03:43"', |
325 'content-subject:A': u'"13:03:43"', |
326 'title-subject:A': u'huuu', |
326 'title-subject:A': u'huuu', |
327 '__redirectrql': redirectrql, |
327 '__redirectrql': redirectrql, |
328 '__redirectvid': 'primary', |
328 '__redirectvid': 'primary', |
329 '__redirectparams': 'toto=tutu&tata=titi', |
329 '__redirectparams': 'toto=tutu&tata=titi', |
375 cwetypeeid = u(cwetypeeid) |
375 cwetypeeid = u(cwetypeeid) |
376 req = self.request() |
376 req = self.request() |
377 req.form = { |
377 req.form = { |
378 'eid': cwetypeeid, |
378 'eid': cwetypeeid, |
379 '__type:'+cwetypeeid: 'CWEType', |
379 '__type:'+cwetypeeid: 'CWEType', |
380 '_cw_edited_fields:'+cwetypeeid: 'name-subject,final-subject,description-subject,read_permission-subject', |
380 '_cw_entity_fields:'+cwetypeeid: 'name-subject,final-subject,description-subject,read_permission-subject', |
381 'name-subject:'+cwetypeeid: u'CWEType', |
381 'name-subject:'+cwetypeeid: u'CWEType', |
382 'final-subject:'+cwetypeeid: '', |
382 'final-subject:'+cwetypeeid: '', |
383 'description-subject:'+cwetypeeid: u'users group', |
383 'description-subject:'+cwetypeeid: u'users group', |
384 'read_permission-subject:'+cwetypeeid: groups, |
384 'read_permission-subject:'+cwetypeeid: groups, |
385 } |
385 } |
399 this seems to be postgres (tsearch?) specific |
399 this seems to be postgres (tsearch?) specific |
400 """ |
400 """ |
401 req = self.request() |
401 req = self.request() |
402 req.form = { |
402 req.form = { |
403 'eid': 'A', '__maineid' : 'A', |
403 'eid': 'A', '__maineid' : 'A', |
404 '__type:A': 'BlogEntry', '_cw_edited_fields:A': 'title-subject,content-subject', |
404 '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'title-subject,content-subject', |
405 'title-subject:A': u'"13:03:40"', |
405 'title-subject:A': u'"13:03:40"', |
406 'content-subject:A': u'"13:03:43"',} |
406 'content-subject:A': u'"13:03:43"',} |
407 path, params = self.expect_redirect_publish(req, 'edit') |
407 path, params = self.expect_redirect_publish(req, 'edit') |
408 self.failUnless(path.startswith('blogentry/')) |
408 self.failUnless(path.startswith('blogentry/')) |
409 eid = path.split('/')[1] |
409 eid = path.split('/')[1] |
416 gueid = self.execute('CWGroup G WHERE G name "users"')[0][0] |
416 gueid = self.execute('CWGroup G WHERE G name "users"')[0][0] |
417 req = self.request() |
417 req = self.request() |
418 req.form = {'eid': ['X', 'Y'], |
418 req.form = {'eid': ['X', 'Y'], |
419 |
419 |
420 '__type:X': 'CWUser', |
420 '__type:X': 'CWUser', |
421 '_cw_edited_fields:X': 'login-subject,upassword-subject,in_group-subject', |
421 '_cw_entity_fields:X': 'login-subject,upassword-subject,in_group-subject', |
422 'login-subject:X': u'adim', |
422 'login-subject:X': u'adim', |
423 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
423 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
424 'in_group-subject:X': `gueid`, |
424 'in_group-subject:X': `gueid`, |
425 |
425 |
426 '__type:Y': 'EmailAddress', |
426 '__type:Y': 'EmailAddress', |
427 '_cw_edited_fields:Y': 'address-subject,alias-subject,use_email-object', |
427 '_cw_entity_fields:Y': 'address-subject,alias-subject,use_email-object', |
428 'address-subject:Y': u'', |
428 'address-subject:Y': u'', |
429 'alias-subject:Y': u'', |
429 'alias-subject:Y': u'', |
430 'use_email-object:Y': 'X', |
430 'use_email-object:Y': 'X', |
431 } |
431 } |
432 with self.assertRaises(ValidationError) as cm: |
432 with self.assertRaises(ValidationError) as cm: |
436 def test_nonregr_copy(self): |
436 def test_nonregr_copy(self): |
437 user = self.user() |
437 user = self.user() |
438 req = self.request() |
438 req = self.request() |
439 req.form = {'__maineid' : 'X', 'eid': 'X', |
439 req.form = {'__maineid' : 'X', 'eid': 'X', |
440 '__cloned_eid:X': user.eid, '__type:X': 'CWUser', |
440 '__cloned_eid:X': user.eid, '__type:X': 'CWUser', |
441 '_cw_edited_fields:X': 'login-subject,upassword-subject', |
441 '_cw_entity_fields:X': 'login-subject,upassword-subject', |
442 'login-subject:X': u'toto', |
442 'login-subject:X': u'toto', |
443 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
443 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
444 } |
444 } |
445 path, params = self.expect_redirect_publish(req, 'edit') |
445 path, params = self.expect_redirect_publish(req, 'edit') |
446 self.assertEqual(path, 'cwuser/toto') |
446 self.assertEqual(path, 'cwuser/toto') |
460 self.execute('SET P use_email E, P primary_email E WHERE P eid %(p)s, E eid %(e)s', |
460 self.execute('SET P use_email E, P primary_email E WHERE P eid %(p)s, E eid %(e)s', |
461 {'p' : p.eid, 'e' : e.eid}) |
461 {'p' : p.eid, 'e' : e.eid}) |
462 req = self.request() |
462 req = self.request() |
463 req.form = {'eid': 'X', |
463 req.form = {'eid': 'X', |
464 '__cloned_eid:X': p.eid, '__type:X': 'CWUser', |
464 '__cloned_eid:X': p.eid, '__type:X': 'CWUser', |
465 '_cw_edited_fields:X': 'login-subject,surname-subject', |
465 '_cw_entity_fields:X': 'login-subject,surname-subject', |
466 'login-subject': u'dodo', |
466 'login-subject': u'dodo', |
467 'surname-subject:X': u'Boom', |
467 'surname-subject:X': u'Boom', |
468 '__errorurl' : "whatever but required", |
468 '__errorurl' : "whatever but required", |
469 } |
469 } |
470 # try to emulate what really happens in the web application |
470 # try to emulate what really happens in the web application |