diff --git a/addons/base_action_rule/base_action_rule_demo.xml b/addons/base_action_rule/base_action_rule_demo.xml index 4c4a5e841ad..c626cd41a3a 100644 --- a/addons/base_action_rule/base_action_rule_demo.xml +++ b/addons/base_action_rule/base_action_rule_demo.xml @@ -43,5 +43,12 @@ [('customer', '=', True)] + + + Test rule on secondary record + on_create + + + diff --git a/addons/base_action_rule/security/ir.model.access.csv b/addons/base_action_rule/security/ir.model.access.csv index b509ec62944..cec3f676e0b 100644 --- a/addons/base_action_rule/security/ir.model.access.csv +++ b/addons/base_action_rule/security/ir.model.access.csv @@ -2,3 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_base_action_rule,base.action.rule,model_base_action_rule,,1,0,0,0 access_base_action_rule_config,base.action.rule config,model_base_action_rule,base.group_system,1,1,1,1 access_base_action_rule_lead_test,access_base_action_rule_lead_test,model_base_action_rule_lead_test,base.group_system,1,1,1,1 +access_base_action_rule_line_test,access_base_action_rule_line_test,model_base_action_rule_line_test,base.group_system,1,1,1,1 diff --git a/addons/base_action_rule/test_models.py b/addons/base_action_rule/test_models.py index 5c0ae12886e..2bfb568d762 100644 --- a/addons/base_action_rule/test_models.py +++ b/addons/base_action_rule/test_models.py @@ -24,6 +24,7 @@ class lead_test(osv.Model): 'active': fields.boolean('Active', required=False), 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null'), 'date_action_last': fields.datetime('Last Action', readonly=1), + 'line_ids': fields.one2many('base.action.rule.line.test', 'lead_id'), } _defaults = { @@ -39,3 +40,12 @@ class lead_test(osv.Model): def message_subscribe(self, cr, uid, ids, partner_ids=None, channel_ids=None, subtype_ids=None, force=True, context=None): pass + + +class line_test(osv.Model): + _name = "base.action.rule.line.test" + _description = "Action Rule Line Test" + + name = openerp.fields.Char() + lead_id = openerp.fields.Many2one('base.action.rule.lead.test', ondelete='cascade') + user_id = openerp.fields.Many2one('res.users') diff --git a/addons/base_action_rule/tests/test_base_action_rule.py b/addons/base_action_rule/tests/test_base_action_rule.py index ccc33404d6f..b6e7d880246 100644 --- a/addons/base_action_rule/tests/test_base_action_rule.py +++ b/addons/base_action_rule/tests/test_base_action_rule.py @@ -77,7 +77,7 @@ class base_action_rule_test(common.TransactionCase): self.assertEqual(lead.state, 'done') self.assertEqual(lead.user_id, self.user_demo) - def test_04_recomputed_field(self): + def test_10_recomputed_field(self): """ Check that a rule is executed whenever a field is recomputed after a change on another model. @@ -91,3 +91,20 @@ class base_action_rule_test(common.TransactionCase): partner.write({'customer': True}) self.assertTrue(lead.customer) self.assertEqual(lead.user_id, self.user_demo) + + def test_20_direct_line(self): + """ + Check that a rule is executed after creating a line record. + """ + line = self.env['base.action.rule.line.test'].create({'name': "Line"}) + self.assertEqual(line.user_id, self.user_demo) + + def test_20_indirect_line(self): + """ + Check that creating a lead with a line executes rules on both records. + """ + lead = self.create_lead(line_ids=[(0, 0, {'name': "Line"})]) + self.assertEqual(lead.state, 'draft') + self.assertEqual(lead.user_id, self.user_demo) + self.assertEqual(len(lead.line_ids), 1) + self.assertEqual(lead.line_ids.user_id, self.user_demo)