[ADD] add new test for onchange on one2many field
authorCédric Pigeon <cedric.pigeon@acsone.eu>
Tue, 2 Sep 2014 14:11:37 +0000 (16:11 +0200)
committerCédric Pigeon <cedric.pigeon@acsone.eu>
Tue, 2 Sep 2014 14:11:37 +0000 (16:11 +0200)
openerp/addons/test_new_api/models.py
openerp/addons/test_new_api/tests/test_onchange.py

index 263868c..84c897e 100644 (file)
@@ -85,11 +85,16 @@ class Discussion(models.Model):
         'test_new_api_discussion_category', 'discussion', 'category')
     participants = fields.Many2many('res.users')
     messages = fields.One2many('test_new_api.message', 'discussion')
+    message_changes = fields.Integer('Message changes')
 
     @api.onchange('moderator')
     def _onchange_moderator(self):
         self.participants |= self.moderator
 
+    @api.onchange('messages')
+    def _onchange_messages(self):
+        self.message_changes = len(self.messages)
+
 
 class Message(models.Model):
     _name = 'test_new_api.message'
index c69becf..cbd24f4 100644 (file)
@@ -163,3 +163,24 @@ class TestOnChange(common.TransactionCase):
 
         self.assertLessEqual(set(['participants']), set(result['value']))
         self.assertItemsEqual(result['value']['participants'], participants + [(4, demo.id)])
+
+    def test_onchange_one2many(self):
+        discussion = self.env.ref('test_new_api.discussion_0')
+        demo = self.env.ref('base.user_demo')
+
+        field_onchange = self.Discussion._onchange_spec()
+        self.assertEqual(field_onchange.get('messages'), '1')
+
+        self.assertEqual(len(discussion.messages), 3)
+        messages = [(4, msg.id) for msg in discussion.messages]
+        messages[0] = (1, messages[0][1], {'body': 'test onchange'})
+        values = {
+            'name': discussion.name,
+            'moderator': demo.id,
+            'categories': [(4, cat.id) for cat in discussion.categories],
+            'messages': messages,
+            'participants': [(4, usr.id) for usr in discussion.participants],
+            'message_changes': len(discussion.messages)
+        }
+        result = discussion.onchange(values, 'messages', field_onchange)
+        self.assertEqual(result['value'].get('message_changes', 0), len(discussion.messages))