210 self.commit() |
210 self.commit() |
211 errors = self.cnx.undo_transaction(txuuid) |
211 errors = self.cnx.undo_transaction(txuuid) |
212 self.assertEqual(errors, |
212 self.assertEqual(errors, |
213 [u"Can't restore relation in_group, object entity " |
213 [u"Can't restore relation in_group, object entity " |
214 "%s doesn't exist anymore." % g.eid]) |
214 "%s doesn't exist anymore." % g.eid]) |
215 ex = self.assertRaises(ValidationError, self.commit) |
215 with self.assertRaises(ValidationError) as cm: |
216 self.assertEqual(ex.entity, self.toto.eid) |
216 self.commit() |
217 self.assertEqual(ex.errors, |
217 self.assertEqual(cm.exception.entity, self.toto.eid) |
|
218 self.assertEqual(cm.exception.errors, |
218 {'in_group-subject': u'at least one relation in_group is ' |
219 {'in_group-subject': u'at least one relation in_group is ' |
219 'required on CWUser (%s)' % self.toto.eid}) |
220 'required on CWUser (%s)' % self.toto.eid}) |
220 |
221 |
221 def test_undo_creation_1(self): |
222 def test_undo_creation_1(self): |
222 session = self.session |
223 session = self.session |
250 email = self.request().create_entity('EmailAddress', address=u'tutu@cubicweb.org') |
251 email = self.request().create_entity('EmailAddress', address=u'tutu@cubicweb.org') |
251 prop = self.request().create_entity('CWProperty', pkey=u'ui.default-text-format', |
252 prop = self.request().create_entity('CWProperty', pkey=u'ui.default-text-format', |
252 value=u'text/html') |
253 value=u'text/html') |
253 tutu.set_relations(use_email=email, reverse_for_user=prop) |
254 tutu.set_relations(use_email=email, reverse_for_user=prop) |
254 self.commit() |
255 self.commit() |
255 ex = self.assertRaises(ValidationError, |
256 with self.assertRaises(ValidationError) as cm: |
256 self.cnx.undo_transaction, txuuid) |
257 self.cnx.undo_transaction(txuuid) |
257 self.assertEqual(ex.entity, tutu.eid) |
258 self.assertEqual(cm.exception.entity, tutu.eid) |
258 self.assertEqual(ex.errors, |
259 self.assertEqual(cm.exception.errors, |
259 {None: 'some later transaction(s) touch entity, undo them first'}) |
260 {None: 'some later transaction(s) touch entity, undo them first'}) |
260 |
261 |
261 def test_undo_creation_integrity_2(self): |
262 def test_undo_creation_integrity_2(self): |
262 session = self.session |
263 session = self.session |
263 g = session.create_entity('CWGroup', name=u'staff') |
264 g = session.create_entity('CWGroup', name=u'staff') |
264 txuuid = self.commit() |
265 txuuid = self.commit() |
265 session.execute('DELETE U in_group G WHERE U eid %(x)s', {'x': self.toto.eid}) |
266 session.execute('DELETE U in_group G WHERE U eid %(x)s', {'x': self.toto.eid}) |
266 self.toto.set_relations(in_group=g) |
267 self.toto.set_relations(in_group=g) |
267 self.commit() |
268 self.commit() |
268 ex = self.assertRaises(ValidationError, |
269 with self.assertRaises(ValidationError) as cm: |
269 self.cnx.undo_transaction, txuuid) |
270 self.cnx.undo_transaction(txuuid) |
270 self.assertEqual(ex.entity, g.eid) |
271 self.assertEqual(cm.exception.entity, g.eid) |
271 self.assertEqual(ex.errors, |
272 self.assertEqual(cm.exception.errors, |
272 {None: 'some later transaction(s) touch entity, undo them first'}) |
273 {None: 'some later transaction(s) touch entity, undo them first'}) |
273 # self.assertEqual(errors, |
274 # self.assertEqual(errors, |
274 # [u"Can't restore relation in_group, object entity " |
275 # [u"Can't restore relation in_group, object entity " |
275 # "%s doesn't exist anymore." % g.eid]) |
276 # "%s doesn't exist anymore." % g.eid]) |
276 # ex = self.assertRaises(ValidationError, self.commit) |
277 # with self.assertRaises(ValidationError) as cm: self.commit() |
277 # self.assertEqual(ex.entity, self.toto.eid) |
278 # self.assertEqual(cm.exception.entity, self.toto.eid) |
278 # self.assertEqual(ex.errors, |
279 # self.assertEqual(cm.exception.errors, |
279 # {'in_group-subject': u'at least one relation in_group is ' |
280 # {'in_group-subject': u'at least one relation in_group is ' |
280 # 'required on CWUser (%s)' % self.toto.eid}) |
281 # 'required on CWUser (%s)' % self.toto.eid}) |
281 |
282 |
282 # test implicit 'replacement' of an inlined relation |
283 # test implicit 'replacement' of an inlined relation |
283 |
284 |