255 self.assertEqual(forminfo['error'].entity, forminfo['eidmap']['X']) |
255 self.assertEqual(forminfo['error'].entity, forminfo['eidmap']['X']) |
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', |
|
261 etype='Directory'): |
|
262 parent_eid = parent_eid or '__cubicweb_internal_field__' |
|
263 with self.admin_access.web_request() as req: |
|
264 req.form = { |
|
265 'eid': unicode(dir_eid), |
|
266 '__maineid': unicode(dir_eid), |
|
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, |
|
270 } |
|
271 self.expect_redirect_handle_request(req) |
|
272 |
|
273 def test_subject_subentity_removal(self): |
|
274 """Editcontroller: detaching a composite relation removes the subentity |
|
275 (edit from the subject side) |
|
276 """ |
|
277 with self.admin_access.repo_cnx() as cnx: |
|
278 topd = cnx.create_entity('Directory', name=u'topd') |
|
279 sub1 = cnx.create_entity('Directory', name=u'sub1', parent=topd) |
|
280 sub2 = cnx.create_entity('Directory', name=u'sub2', parent=topd) |
|
281 cnx.commit() |
|
282 |
|
283 self._edit_parent(sub1.eid, parent_eid=None) |
|
284 |
|
285 with self.admin_access.repo_cnx() as cnx: |
|
286 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
|
287 self.assertFalse(cnx.find('Directory', eid=sub1.eid)) |
|
288 self.assertTrue(cnx.find('Directory', eid=sub2.eid)) |
|
289 |
|
290 def test_object_subentity_removal(self): |
|
291 """Editcontroller: detaching a composite relation removes the subentity |
|
292 (edit from the object side) |
|
293 """ |
|
294 with self.admin_access.repo_cnx() as cnx: |
|
295 topd = cnx.create_entity('Directory', name=u'topd') |
|
296 sub1 = cnx.create_entity('Directory', name=u'sub1', parent=topd) |
|
297 sub2 = cnx.create_entity('Directory', name=u'sub2', parent=topd) |
|
298 cnx.commit() |
|
299 |
|
300 self._edit_parent(topd.eid, parent_eid=sub1.eid, role='object') |
|
301 |
|
302 with self.admin_access.repo_cnx() as cnx: |
|
303 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
|
304 self.assertTrue(cnx.find('Directory', eid=sub1.eid)) |
|
305 self.assertFalse(cnx.find('Directory', eid=sub2.eid)) |
|
306 |
|
307 def test_reparent_subentity(self): |
|
308 "Editcontroller: re-parenting a subentity does not remove it" |
|
309 with self.admin_access.repo_cnx() as cnx: |
|
310 top1 = cnx.create_entity('Directory', name=u'top1') |
|
311 top2 = cnx.create_entity('Directory', name=u'top2') |
|
312 subd = cnx.create_entity('Directory', name=u'subd', parent=top1) |
|
313 cnx.commit() |
|
314 |
|
315 self._edit_parent(subd.eid, parent_eid=top2.eid) |
|
316 |
|
317 with self.admin_access.repo_cnx() as cnx: |
|
318 self.assertTrue(cnx.find('Directory', eid=top1.eid)) |
|
319 self.assertTrue(cnx.find('Directory', eid=top2.eid)) |
|
320 self.assertTrue(cnx.find('Directory', eid=subd.eid)) |
|
321 self.assertEqual( |
|
322 cnx.find('Directory', eid=subd.eid).one().parent[0], top2) |
|
323 |
|
324 def test_subject_mixed_composite_subentity_removal_1(self): |
|
325 """Editcontroller: detaching several subentities respects each rdef's |
|
326 compositeness - Remove non composite |
|
327 """ |
|
328 with self.admin_access.repo_cnx() as cnx: |
|
329 topd = cnx.create_entity('Directory', name=u'topd') |
|
330 fs = cnx.create_entity('Filesystem', name=u'/tmp') |
|
331 subd = cnx.create_entity('Directory', name=u'subd', |
|
332 parent=(topd, fs)) |
|
333 cnx.commit() |
|
334 |
|
335 self._edit_parent(subd.eid, parent_eid=topd.eid) |
|
336 |
|
337 with self.admin_access.repo_cnx() as cnx: |
|
338 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
|
339 self.assertTrue(cnx.find('Directory', eid=subd.eid)) |
|
340 self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
|
341 self.assertEqual(cnx.find('Directory', eid=subd.eid).one().parent, |
|
342 [topd,]) |
|
343 |
|
344 def test_subject_mixed_composite_subentity_removal_2(self): |
|
345 """Editcontroller: detaching several subentities respects each rdef's |
|
346 compositeness - Remove composite |
|
347 """ |
|
348 with self.admin_access.repo_cnx() as cnx: |
|
349 topd = cnx.create_entity('Directory', name=u'topd') |
|
350 fs = cnx.create_entity('Filesystem', name=u'/tmp') |
|
351 subd = cnx.create_entity('Directory', name=u'subd', |
|
352 parent=(topd, fs)) |
|
353 cnx.commit() |
|
354 |
|
355 self._edit_parent(subd.eid, parent_eid=fs.eid) |
|
356 |
|
357 with self.admin_access.repo_cnx() as cnx: |
|
358 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
|
359 self.assertFalse(cnx.find('Directory', eid=subd.eid)) |
|
360 self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
|
361 |
|
362 def test_object_mixed_composite_subentity_removal_1(self): |
|
363 """Editcontroller: detaching several subentities respects each rdef's |
|
364 compositeness - Remove non composite |
|
365 """ |
|
366 with self.admin_access.repo_cnx() as cnx: |
|
367 topd = cnx.create_entity('Directory', name=u'topd') |
|
368 fs = cnx.create_entity('Filesystem', name=u'/tmp') |
|
369 subd = cnx.create_entity('Directory', name=u'subd', |
|
370 parent=(topd, fs)) |
|
371 cnx.commit() |
|
372 |
|
373 self._edit_parent(fs.eid, parent_eid=None, role='object', |
|
374 etype='Filesystem') |
|
375 |
|
376 with self.admin_access.repo_cnx() as cnx: |
|
377 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
|
378 self.assertTrue(cnx.find('Directory', eid=subd.eid)) |
|
379 self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
|
380 self.assertEqual(cnx.find('Directory', eid=subd.eid).one().parent, |
|
381 [topd,]) |
|
382 |
|
383 def test_object_mixed_composite_subentity_removal_2(self): |
|
384 """Editcontroller: detaching several subentities respects each rdef's |
|
385 compositeness - Remove composite |
|
386 """ |
|
387 with self.admin_access.repo_cnx() as cnx: |
|
388 topd = cnx.create_entity('Directory', name=u'topd') |
|
389 fs = cnx.create_entity('Filesystem', name=u'/tmp') |
|
390 subd = cnx.create_entity('Directory', name=u'subd', |
|
391 parent=(topd, fs)) |
|
392 cnx.commit() |
|
393 |
|
394 self._edit_parent(topd.eid, parent_eid=None, role='object') |
|
395 |
|
396 with self.admin_access.repo_cnx() as cnx: |
|
397 self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
|
398 self.assertFalse(cnx.find('Directory', eid=subd.eid)) |
|
399 self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
|
400 |
260 def test_ajax_view_raise_arbitrary_error(self): |
401 def test_ajax_view_raise_arbitrary_error(self): |
261 class ErrorAjaxView(view.View): |
402 class ErrorAjaxView(view.View): |
262 __regid__ = 'test.ajax.error' |
403 __regid__ = 'test.ajax.error' |
263 def call(self): |
404 def call(self): |
264 raise Exception('whatever') |
405 raise Exception('whatever') |