summaryrefslogtreecommitdiff
path: root/addons/base_automation/tests/test_automation.py
blob: 1acdf6178c79e249e3d5b0633fafa7b55b9cd781 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import TransactionCase
from odoo.exceptions import UserError

import odoo.tests

@odoo.tests.tagged('post_install', '-at_install')
class TestAutomation(TransactionCase):

    def test_01_on_create(self):
        """ Simple on_create with admin user """
        self.env["base.automation"].create({
            "name": "Force Archived Contacts",
            "trigger": "on_create_or_write",
            "model_id": self.env.ref("base.model_res_partner").id,
            "type": "ir.actions.server",
            "trigger_field_ids": [(6, 0, [self.env.ref("base.field_res_partner__name").id])],
            "fields_lines": [(0, 0, {
                "col1": self.env.ref("base.field_res_partner__active").id,
                "evaluation_type": "equation",
                "value": "False",
            })],
        })

        # verify the partner can be created and the action still runs
        bilbo = self.env["res.partner"].create({"name": "Bilbo Baggins"})
        self.assertFalse(bilbo.active)

        # verify the partner can be updated and the action still runs
        bilbo.active = True
        bilbo.name = "Bilbo"
        self.assertFalse(bilbo.active)


    def test_02_on_create_restricted(self):
        """ on_create action with low portal user """
        action = self.env["base.automation"].create({
            "name": "Force Archived Filters",
            "trigger": "on_create_or_write",
            "model_id": self.env.ref("base.model_ir_filters").id,
            "type": "ir.actions.server",
            "trigger_field_ids": [(6, 0, [self.env.ref("base.field_ir_filters__name").id])],
            "fields_lines": [(0, 0, {
                "col1": self.env.ref("base.field_ir_filters__active").id,
                "evaluation_type": "equation",
                "value": "False",
            })],
        })
        # action cached was cached with admin, force CacheMiss
        action.env.clear()

        self_portal = self.env["ir.filters"].with_user(self.env.ref("base.user_demo").id)
        # verify the portal user can create ir.filters but can not read base.automation
        self.assertTrue(self_portal.env["ir.filters"].check_access_rights("create", raise_exception=False))
        self.assertFalse(self_portal.env["base.automation"].check_access_rights("read", raise_exception=False))

        # verify the filter can be created and the action still runs
        filters = self_portal.create({
            "name": "Where is Bilbo?",
            "domain": "[('name', 'ilike', 'bilbo')]",
            "model_id": "res.partner",
        })
        self.assertFalse(filters.active)

        # verify the filter can be updated and the action still runs
        filters.active = True
        filters.name = "Where is Bilbo Baggins?"
        self.assertFalse(filters.active)


    def test_03_on_change_restricted(self):
        """ on_create action with low portal user """
        action = self.env["base.automation"].create({
            "name": "Force Archived Filters",
            "trigger": "on_change",
            "model_id": self.env.ref("base.model_ir_filters").id,
            "type": "ir.actions.server",
            "on_change_field_ids": [(6, 0, [self.env.ref("base.field_ir_filters__name").id])],
            "state": "code",
            "code": """action = {'value': {'active': False}}""",
        })
        # action cached was cached with admin, force CacheMiss
        action.env.clear()

        self_portal = self.env["ir.filters"].with_user(self.env.ref("base.user_demo").id)

        # simulate a onchange call on name
        onchange = self_portal.onchange({}, [], {"name": "1", "active": ""})
        self.assertEqual(onchange["value"]["active"], False)