Nested same set_user should keep the original context user
- set_context of Transaction.set_user is restricted to root issue3523 review1961002
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
* set_context of Transaction.set_user is restricted to root
|
||||
* Add a "copy" action to One2Many and Many2Many's set method
|
||||
* Force UTC as timezone (migration script available on tryton-tools)
|
||||
* Add relation_field for many2one
|
||||
|
||||
@@ -56,6 +56,41 @@ class TransactionTestCase(unittest.TestCase):
|
||||
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)
|
||||
|
||||
@@ -118,10 +118,16 @@ class Transaction(local):
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user