256 self.assertEqual(forminfo['error'].errors, |
256 self.assertEqual(forminfo['error'].errors, |
257 {'login-subject': u'the value "admin" is already used, use another one'}) |
257 {'login-subject': u'the value "admin" is already used, use another one'}) |
258 self.assertEqual(forminfo['values'], req.form) |
258 self.assertEqual(forminfo['values'], req.form) |
259 |
259 |
260 def _edit_parent(self, dir_eid, parent_eid, role='subject', |
260 def _edit_parent(self, dir_eid, parent_eid, role='subject', |
261 etype='Directory'): |
261 etype='Directory', **kwargs): |
262 parent_eid = parent_eid or '__cubicweb_internal_field__' |
262 parent_eid = parent_eid or '__cubicweb_internal_field__' |
263 with self.admin_access.web_request() as req: |
263 with self.admin_access.web_request() as req: |
264 req.form = { |
264 req.form = { |
265 'eid': unicode(dir_eid), |
265 'eid': unicode(dir_eid), |
266 '__maineid': unicode(dir_eid), |
266 '__maineid': unicode(dir_eid), |
267 '__type:%s' % dir_eid: etype, |
267 '__type:%s' % dir_eid: etype, |
268 '_cw_entity_fields:%s' % dir_eid: 'parent-%s' % role, |
|
269 'parent-%s:%s' % (role, dir_eid): parent_eid, |
268 'parent-%s:%s' % (role, dir_eid): parent_eid, |
270 } |
269 } |
|
270 req.form.update(kwargs) |
|
271 req.form['_cw_entity_fields:%s' % dir_eid] = ','.join( |
|
272 ['parent-%s' % role] + |
|
273 [key.split(':')[0] |
|
274 for key in kwargs.keys() |
|
275 if not key.startswith('_')]) |
271 self.expect_redirect_handle_request(req) |
276 self.expect_redirect_handle_request(req) |
|
277 |
|
278 def test_create_and_link_directories(self): |
|
279 with self.admin_access.web_request() as req: |
|
280 req.form = { |
|
281 'eid': (u'A', u'B'), |
|
282 '__maineid': u'A', |
|
283 '__type:A': 'Directory', |
|
284 '__type:B': 'Directory', |
|
285 'parent-subject:B': u'A', |
|
286 'name-subject:A': u'topd', |
|
287 'name-subject:B': u'subd', |
|
288 '_cw_entity_fields:A': 'name-subject', |
|
289 '_cw_entity_fields:B': 'parent-subject,name-subject', |
|
290 } |
|
291 self.expect_redirect_handle_request(req) |
|
292 |
|
293 with self.admin_access.repo_cnx() as cnx: |
|
294 self.assertTrue(cnx.find('Directory', name=u'topd')) |
|
295 self.assertTrue(cnx.find('Directory', name=u'subd')) |
|
296 self.assertEqual(1, cnx.execute( |
|
297 'Directory SUBD WHERE SUBD parent TOPD,' |
|
298 ' SUBD name "subd", TOPD name "topd"').rowcount) |
|
299 |
|
300 def test_create_subentity(self): |
|
301 with self.admin_access.repo_cnx() as cnx: |
|
302 topd = cnx.create_entity('Directory', name=u'topd') |
|
303 cnx.commit() |
|
304 |
|
305 with self.admin_access.web_request() as req: |
|
306 req.form = { |
|
307 'eid': (unicode(topd.eid), u'B'), |
|
308 '__maineid': unicode(topd.eid), |
|
309 '__type:%s' % topd.eid: 'Directory', |
|
310 '__type:B': 'Directory', |
|
311 'parent-object:%s' % topd.eid: u'B', |
|
312 'name-subject:B': u'subd', |
|
313 '_cw_entity_fields:%s' % topd.eid: 'parent-object', |
|
314 '_cw_entity_fields:B': 'name-subject', |
|
315 } |
|
316 self.expect_redirect_handle_request(req) |
|
317 |
|
318 with self.admin_access.repo_cnx() as cnx: |
|
319 self.assertTrue(cnx.find('Directory', name=u'topd')) |
|
320 self.assertTrue(cnx.find('Directory', name=u'subd')) |
|
321 self.assertEqual(1, cnx.execute( |
|
322 'Directory SUBD WHERE SUBD parent TOPD,' |
|
323 ' SUBD name "subd", TOPD name "topd"').rowcount) |
272 |
324 |
273 def test_subject_subentity_removal(self): |
325 def test_subject_subentity_removal(self): |
274 """Editcontroller: detaching a composite relation removes the subentity |
326 """Editcontroller: detaching a composite relation removes the subentity |
275 (edit from the subject side) |
327 (edit from the subject side) |
276 """ |
328 """ |
278 topd = cnx.create_entity('Directory', name=u'topd') |
330 topd = cnx.create_entity('Directory', name=u'topd') |
279 sub1 = cnx.create_entity('Directory', name=u'sub1', parent=topd) |
331 sub1 = cnx.create_entity('Directory', name=u'sub1', parent=topd) |
280 sub2 = cnx.create_entity('Directory', name=u'sub2', parent=topd) |
332 sub2 = cnx.create_entity('Directory', name=u'sub2', parent=topd) |
281 cnx.commit() |
333 cnx.commit() |
282 |
334 |
283 self._edit_parent(sub1.eid, parent_eid=None) |
335 attrs = {'name-subject:%s' % sub1.eid: ''} |
|
336 self._edit_parent(sub1.eid, parent_eid=None, **attrs) |
284 |
337 |
285 with self.admin_access.repo_cnx() as cnx: |
338 with self.admin_access.repo_cnx() as cnx: |
286 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
339 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
287 self.assertFalse(cnx.find('Directory', eid=sub1.eid)) |
340 self.assertFalse(cnx.find('Directory', eid=sub1.eid)) |
288 self.assertTrue(cnx.find('Directory', eid=sub2.eid)) |
341 self.assertTrue(cnx.find('Directory', eid=sub2.eid)) |