# HG changeset patch # User RĂ©mi Cardona # Date 1444321449 -7200 # Node ID 1ed205146ee27ab032254929dce87a56140b2aeb # Parent 243e96db0004cba068796b95cae2c5e211150a5b [devtools] Fix CubicWebTC.temporary_permissions If the context manager is exited via an exception, the original permissions should be restored. diff -r 243e96db0004 -r 1ed205146ee2 devtools/test/unittest_testlib.py --- a/devtools/test/unittest_testlib.py Thu Oct 08 18:09:10 2015 +0200 +++ b/devtools/test/unittest_testlib.py Thu Oct 08 18:24:09 2015 +0200 @@ -196,6 +196,18 @@ self.assertTrue(rdef.permissions['add']) self.assertTrue(rdef.permissions['read'], ()) + def test_temporary_permissions_rdef_with_exception(self): + rdef = self.schema['CWUser'].rdef('in_group') + try: + with self.temporary_permissions((rdef, {'read': ()})): + self.assertEqual(rdef.permissions['read'], ()) + self.assertTrue(rdef.permissions['add']) + raise ValueError('goto') + except ValueError: + self.assertTrue(rdef.permissions['read'], ()) + else: + self.fail('exception was caught unexpectedly') + def test_temporary_appobjects_registered(self): class AnAppobject(object): diff -r 243e96db0004 -r 1ed205146ee2 devtools/testlib.py --- a/devtools/testlib.py Thu Oct 08 18:09:10 2015 +0200 +++ b/devtools/testlib.py Thu Oct 08 18:24:09 2015 +0200 @@ -719,12 +719,14 @@ origperms = erschema.permissions[action] erschema.set_action_permissions(action, actionperms) torestore.append([erschema, action, origperms]) - yield - for erschema, action, permissions in torestore: - if action is None: - erschema.permissions = permissions - else: - erschema.set_action_permissions(action, permissions) + try: + yield + finally: + for erschema, action, permissions in torestore: + if action is None: + erschema.permissions = permissions + else: + erschema.set_action_permissions(action, permissions) def assertModificationDateGreater(self, entity, olddate): entity.cw_attr_cache.pop('modification_date', None)