74 lines
2.7 KiB
Diff
74 lines
2.7 KiB
Diff
Index: trytond/tests/test_transaction.py
|
|
===================================================================
|
|
|
|
--- a/trytond/trytond/tests/test_transaction.py
|
|
+++ b/trytond/trytond/tests/test_transaction.py
|
|
@@ -56,6 +56,41 @@
|
|
Exception, manipulate_cursor, DB_NAME, USER, context=CONTEXT)
|
|
self.assertTrue(empty_transaction(DB_NAME, USER, context=CONTEXT))
|
|
|
|
+ def test0030set_user(self):
|
|
+ '''
|
|
+ Test set_user
|
|
+ '''
|
|
+ with Transaction().start(DB_NAME, USER, context=CONTEXT) \
|
|
+ as transaction:
|
|
+ self.assertEqual(transaction.user, USER)
|
|
+ self.assertEqual(transaction.context.get('user'), None)
|
|
+
|
|
+ with Transaction().set_user(0):
|
|
+ self.assertEqual(transaction.user, 0)
|
|
+ self.assertEqual(transaction.context.get('user'), None)
|
|
+
|
|
+ with Transaction().set_user(0, set_context=True):
|
|
+ self.assertEqual(transaction.user, 0)
|
|
+ self.assertEqual(transaction.context.get('user'), USER)
|
|
+
|
|
+ # Nested same set_user should keep original context user
|
|
+ with Transaction().set_user(0, set_context=True):
|
|
+ self.assertEqual(transaction.user, 0)
|
|
+ self.assertEqual(transaction.context.get('user'), USER)
|
|
+
|
|
+ # Unset user context
|
|
+ with Transaction().set_user(0, set_context=False):
|
|
+ self.assertEqual(transaction.user, 0)
|
|
+ self.assertEqual(transaction.context.get('user'), None)
|
|
+
|
|
+ # set context for non root
|
|
+ self.assertRaises(ValueError,
|
|
+ Transaction().set_user, 2, set_context=True)
|
|
+
|
|
+ # not set context for non root
|
|
+ with Transaction().set_user(2):
|
|
+ self.assertEqual(transaction.user, 2)
|
|
+
|
|
|
|
def suite():
|
|
return unittest.TestLoader().loadTestsFromTestCase(TransactionTestCase)
|
|
|
|
Index: trytond/transaction.py
|
|
===================================================================
|
|
|
|
--- a/trytond/trytond/transaction.py
|
|
+++ b/trytond/trytond/transaction.py
|
|
@@ -118,10 +118,16 @@
|
|
return manager
|
|
|
|
def set_user(self, user, set_context=False):
|
|
+ if user != 0 and set_context:
|
|
+ raise ValueError('set_context only allowed for root')
|
|
manager = _AttributeManager(user=self.user,
|
|
- context=self.context.copy())
|
|
+ context=self.context)
|
|
+ self.context = self.context.copy()
|
|
if set_context:
|
|
- self.context.update({'user': self.user})
|
|
+ if user != self.user:
|
|
+ self.context['user'] = self.user
|
|
+ else:
|
|
+ self.context.pop('user', None)
|
|
self.user = user
|
|
return manager
|
|
|
|
|