1 # -*- coding: utf-8 -*-
3 from openerp.tests import common
5 class TestOnChange(common.TransactionCase):
8 super(TestOnChange, self).setUp()
9 self.Discussion = self.env['test_new_api.discussion']
10 self.Message = self.env['test_new_api.message']
12 def test_default_get(self):
13 """ checking values returned by default_get() """
14 fields = ['name', 'categories', 'participants', 'messages']
15 values = self.Discussion.default_get(fields)
16 self.assertEqual(values, {})
18 def test_get_field(self):
19 """ checking that accessing an unknown attribute does nothing special """
20 with self.assertRaises(AttributeError):
21 self.Discussion.not_really_a_method()
23 def test_onchange(self):
24 """ test the effect of onchange() """
25 discussion = self.env.ref('test_new_api.discussion_0')
26 BODY = "What a beautiful day!"
29 field_onchange = self.Message._onchange_spec()
30 self.assertEqual(field_onchange.get('author'), '1')
31 self.assertEqual(field_onchange.get('body'), '1')
32 self.assertEqual(field_onchange.get('discussion'), '1')
35 'discussion': discussion.id,
36 'name': "[%s] %s" % ('', USER.name),
41 self.env.invalidate_all()
42 result = self.Message.onchange(values, 'discussion', field_onchange)
43 self.assertLessEqual(set(['name']), set(result['value']))
44 self.assertEqual(result['value']['name'], "[%s] %s" % (discussion.name, USER.name))
47 'discussion': discussion.id,
48 'name': "[%s] %s" % (discussion.name, USER.name),
53 self.env.invalidate_all()
54 result = self.Message.onchange(values, 'body', field_onchange)
55 self.assertLessEqual(set(['size']), set(result['value']))
56 self.assertEqual(result['value']['size'], len(BODY))
58 def test_onchange_one2many(self):
59 """ test the effect of onchange() on one2many fields """
60 BODY = "What a beautiful day!"
63 # create an independent message
64 message = self.Message.create({'body': BODY})
65 self.assertEqual(message.name, "[%s] %s" % ('', USER.name))
67 field_onchange = self.Discussion._onchange_spec()
68 self.assertEqual(field_onchange.get('name'), '1')
69 self.assertEqual(field_onchange.get('messages'), '1')
71 # FIXME: commented out because currently not supported by the client
80 # 'name': "[%s] %s" % ('', USER.name),
88 # self.env.invalidate_all()
89 # result = self.Discussion.onchange(values, 'messages', field_onchange)
90 # self.assertLessEqual(set(['messages']), set(result['value']))
91 # self.assertItemsEqual(result['value']['messages'], [
93 # 'name': "[%s] %s" % ("Foo", USER.name),
99 # 'name': "[%s] %s" % ("Foo", USER.name),
106 # modify discussion name
114 'name': "[%s] %s" % ('', USER.name),
122 self.env.invalidate_all()
123 result = self.Discussion.onchange(values, 'name', field_onchange)
124 self.assertLessEqual(set(['messages']), set(result['value']))
125 self.assertItemsEqual(result['value']['messages'], [
127 'name': "[%s] %s" % ("Foo", USER.name),
133 'name': "[%s] %s" % ("Foo", USER.name),
140 def test_onchange_specific(self):
141 """ test the effect of field-specific onchange method """
142 discussion = self.env.ref('test_new_api.discussion_0')
143 demo = self.env.ref('base.user_demo')
145 field_onchange = self.Discussion._onchange_spec()
146 self.assertEqual(field_onchange.get('moderator'), '1')
148 # first remove demo user from participants
149 discussion.participants -= demo
150 self.assertNotIn(demo, discussion.participants)
152 # check that demo_user is added to participants when set as moderator
153 participants = [(4, usr.id) for usr in discussion.participants]
155 'name': discussion.name,
156 'moderator': demo.id,
157 'categories': [(4, cat.id) for cat in discussion.categories],
158 'messages': [(4, msg.id) for msg in discussion.messages],
159 'participants': participants,
161 self.env.invalidate_all()
162 result = discussion.onchange(values, 'moderator', field_onchange)
164 self.assertLessEqual(set(['participants']), set(result['value']))
165 self.assertItemsEqual(result['value']['participants'], participants + [(4, demo.id)])
167 def test_onchange_one2many_value(self):
168 """ test the value of the one2many field inside the onchange """
169 discussion = self.env.ref('test_new_api.discussion_0')
170 demo = self.env.ref('base.user_demo')
172 field_onchange = self.Discussion._onchange_spec()
173 self.assertEqual(field_onchange.get('messages'), '1')
175 self.assertEqual(len(discussion.messages), 3)
176 messages = [(4, msg.id) for msg in discussion.messages]
177 messages[0] = (1, messages[0][1], {'body': 'test onchange'})
179 'name': discussion.name,
180 'moderator': demo.id,
181 'categories': [(4, cat.id) for cat in discussion.categories],
182 'messages': messages,
183 'participants': [(4, usr.id) for usr in discussion.participants],
184 'message_changes': 0,
186 result = discussion.onchange(values, 'messages', field_onchange)
187 self.assertEqual(result['value'].get('message_changes', 0), len(discussion.messages))