# Copyright 2017 Onestein () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo.tests.common import SingleTransactionCase, at_install, post_install from odoo.exceptions import AccessError, UserError @at_install(False) @post_install(True) class TestBiSqlViewEditor(SingleTransactionCase): @classmethod def setUpClass(cls): super(TestBiSqlViewEditor, cls).setUpClass() cls.res_partner = cls.env['res.partner'] cls.res_users = cls.env['res.users'] cls.bi_sql_view = cls.env['bi.sql.view'] cls.group_bi_user = cls.env.ref( 'sql_request_abstract.group_sql_request_manager') cls.group_user = cls.env.ref( 'base.group_user') cls.view = cls.bi_sql_view.create({ 'name': 'Partners View 2', 'is_materialized': True, 'technical_name': 'partners_view_2', 'query': "SELECT name as x_name, street as x_street," "company_id as x_company_id FROM res_partner " "ORDER BY name" }) cls.company = cls.env.ref('base.main_company') # Create bi user cls.bi_user = cls._create_user('bi_user', cls.group_bi_user, cls.company) cls.no_bi_user = cls._create_user('no_bi_user', cls.group_user, cls.company) @classmethod def _create_user(cls, login, groups, company): """Create a user.""" user = cls.res_users.create({ 'name': login, 'login': login, 'password': 'demo', 'email': 'example@yourcompany.com', 'company_id': company.id, 'groups_id': [(6, 0, groups.ids)] }) return user def test_process_view(self): view = self.view self.assertEqual(view.state, 'draft', 'state not draft') view.button_validate_sql_expression() self.assertEqual(view.state, 'sql_valid', 'state not sql_valid') view.button_create_sql_view_and_model() self.assertEqual(view.state, 'model_valid', 'state not model_valid') view.button_create_ui() self.assertEqual(view.state, 'ui_valid', 'state not ui_valid') view.button_update_model_access() self.assertEqual(view.has_group_changed, False, 'has_group_changed not False') cron_res = view.cron_id.method_direct_trigger() self.assertEqual(cron_res, True, 'something went wrong with the cron') def test_copy(self): copy_view = self.view.copy() self.assertEqual( copy_view.name, 'Partners View 2 (Copy)', 'Wrong name') def test_security(self): with self.assertRaises(AccessError): self.bi_sql_view.sudo(self.no_bi_user.id).search( [('name', '=', 'Partners View 2')]) bi = self.bi_sql_view.sudo(self.bi_user.id).search( [('name', '=', 'Partners View 2')]) self.assertEqual(len(bi), 1, 'Bi user should not have access to ' 'bi %s' % self.view.name) def test_unlink(self): self.assertEqual(self.view.state, 'ui_valid', 'state not ui_valid') with self.assertRaises(UserError): self.view.unlink() self.view.button_set_draft() self.view.unlink() res = self.bi_sql_view.search([('name', '=', 'Partners View 2')]) self.assertEqual(len(res), 0, 'View not deleted')