mirror of
https://gitlab.com/flectra-community/reporting-engine.git
synced 2024-12-23 21:01:49 +00:00
252 lines
8.4 KiB
Python
252 lines
8.4 KiB
Python
|
# Copyright 2017-2018 Onestein (<http://www.onestein.eu>)
|
||
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||
|
|
||
|
import json
|
||
|
|
||
|
from flectra.tests.common import TransactionCase, at_install, post_install
|
||
|
from flectra.exceptions import UserError
|
||
|
|
||
|
|
||
|
class TestBiViewEditor(TransactionCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
|
||
|
def _get_models(model_name_list):
|
||
|
Model = self.env['ir.model']
|
||
|
return (Model.search(
|
||
|
[('model', '=', name)]) for name in model_name_list)
|
||
|
|
||
|
def _get_fields(model_field_list):
|
||
|
ModelFields = self.env['ir.model.fields']
|
||
|
return (ModelFields.search(
|
||
|
[('model', '=', model_field[0]),
|
||
|
('name', '=', model_field[1])],
|
||
|
limit=1) for model_field in model_field_list)
|
||
|
|
||
|
def get_new_field(self):
|
||
|
new_field = {
|
||
|
'model_id': self.partner_model.id,
|
||
|
'name': self.partner_field_name,
|
||
|
'custom': False,
|
||
|
'id': self.partner_field.id,
|
||
|
'model': self.partner_model_name,
|
||
|
'type': self.partner_field.ttype,
|
||
|
'model_name': self.partner_model.name,
|
||
|
'description': self.partner_field.field_description
|
||
|
}
|
||
|
return new_field
|
||
|
|
||
|
super(TestBiViewEditor, self).setUp()
|
||
|
self.partner_model_name = 'res.partner'
|
||
|
self.partner_field_name = 'name'
|
||
|
self.partner_company_field_name = 'company_id'
|
||
|
self.company_model_name = 'res.company'
|
||
|
self.company_field_name = 'name'
|
||
|
|
||
|
self.bi_view1 = None
|
||
|
|
||
|
self.partner_model, self.company_model = _get_models(
|
||
|
[self.partner_model_name, self.company_model_name])
|
||
|
|
||
|
(self.partner_field,
|
||
|
self.partner_company_field,
|
||
|
self.company_field) = _get_fields([
|
||
|
(self.partner_model_name, self.partner_field_name),
|
||
|
(self.partner_model_name, self.partner_company_field_name),
|
||
|
(self.company_model_name, self.company_field_name)])
|
||
|
|
||
|
data = [
|
||
|
{'model_id': self.partner_model.id,
|
||
|
'name': self.partner_field_name,
|
||
|
'model_name': self.partner_model.name,
|
||
|
'model': self.partner_model_name,
|
||
|
'custom': 0,
|
||
|
'type': self.partner_field.ttype,
|
||
|
'id': self.partner_field.id,
|
||
|
'description': self.partner_field.field_description,
|
||
|
'table_alias': 't0',
|
||
|
'row': 0,
|
||
|
'column': 1,
|
||
|
'list': 1,
|
||
|
'measure': 0
|
||
|
},
|
||
|
{'model_id': self.partner_model.id,
|
||
|
'name': self.partner_company_field_name,
|
||
|
'table_alias': 't0',
|
||
|
'custom': 0,
|
||
|
'relation': self.company_model_name,
|
||
|
'model': self.partner_model_name,
|
||
|
'model_name': self.partner_model.name,
|
||
|
'type': self.partner_company_field.ttype,
|
||
|
'id': self.partner_company_field.id,
|
||
|
'join_node': 't1',
|
||
|
'description': self.partner_company_field.field_description,
|
||
|
'row': 0,
|
||
|
'column': 0,
|
||
|
'list': 1,
|
||
|
'measure': 0
|
||
|
},
|
||
|
{'model_id': self.company_model.id,
|
||
|
'name': 'name_1',
|
||
|
'model_name': self.company_model.name,
|
||
|
'model': self.company_model_name,
|
||
|
'custom': 0,
|
||
|
'type': self.company_field.ttype,
|
||
|
'id': self.company_field.id,
|
||
|
'description': self.company_field.field_description,
|
||
|
'table_alias': 't1',
|
||
|
'row': 1,
|
||
|
'column': 0,
|
||
|
'list': 0,
|
||
|
'measure': 0
|
||
|
}
|
||
|
]
|
||
|
format_data = json.dumps(data)
|
||
|
|
||
|
self.bi_view1_vals = {
|
||
|
'state': 'draft',
|
||
|
'data': format_data
|
||
|
}
|
||
|
|
||
|
self.new_field = get_new_field(self)
|
||
|
|
||
|
def test_01_get_fields(self):
|
||
|
Model = self.env['ir.model']
|
||
|
fields = Model.get_fields(self.partner_model.id)
|
||
|
self.assertIsInstance(fields, list)
|
||
|
self.assertGreater(len(fields), 0)
|
||
|
|
||
|
def test_02_get_join_nodes(self):
|
||
|
Fields = self.env['ir.model.fields']
|
||
|
field_res_users = Fields.search([
|
||
|
('name', '=', 'login'),
|
||
|
('model', '=', 'res.users')
|
||
|
], limit=1)
|
||
|
field_data = [{
|
||
|
'model_id': field_res_users.model_id.id,
|
||
|
'name': 'login',
|
||
|
'column': False,
|
||
|
'table_alias': 't0',
|
||
|
'custom': False,
|
||
|
'measure': False,
|
||
|
'id': field_res_users.id,
|
||
|
'model': 'res.users',
|
||
|
'row': False,
|
||
|
'type': 'char',
|
||
|
'model_name': 'Users',
|
||
|
'description': 'Login'
|
||
|
}]
|
||
|
new_field = self.new_field
|
||
|
Model = self.env['ir.model']
|
||
|
nodes = Model.get_join_nodes(field_data, new_field)
|
||
|
self.assertIsInstance(nodes, list)
|
||
|
self.assertGreater(len(nodes), 0)
|
||
|
|
||
|
def test_03_get_join_nodes(self):
|
||
|
new_field = self.new_field
|
||
|
Model = self.env['ir.model']
|
||
|
nodes = Model.get_join_nodes([], new_field)
|
||
|
self.assertIsInstance(nodes, list)
|
||
|
self.assertEqual(len(nodes), 0)
|
||
|
|
||
|
def test_04_get_related_models(self):
|
||
|
Model = self.env['ir.model']
|
||
|
related_models = Model.get_related_models({
|
||
|
't0': self.partner_model.id,
|
||
|
't1': self.company_model.id
|
||
|
})
|
||
|
self.assertIsInstance(related_models, list)
|
||
|
self.assertGreater(len(related_models), 0)
|
||
|
|
||
|
def test_05_create_copy_view(self):
|
||
|
vals = self.bi_view1_vals
|
||
|
vals.update({'name': 'Test View1'})
|
||
|
|
||
|
# create
|
||
|
bi_view1 = self.env['bve.view'].create(vals)
|
||
|
self.assertIsNotNone(bi_view1)
|
||
|
self.assertEqual(len(bi_view1), 1)
|
||
|
self.assertEqual(bi_view1.state, 'draft')
|
||
|
|
||
|
# copy
|
||
|
bi_view2 = bi_view1.copy()
|
||
|
self.assertEqual(bi_view2.name, 'Test View1 (copy)')
|
||
|
|
||
|
def test_06_create_group_bve_object(self):
|
||
|
vals = self.bi_view1_vals
|
||
|
employees_group = self.env.ref('base.group_user')
|
||
|
vals.update({
|
||
|
'name': 'Test View2',
|
||
|
'group_ids': [(6, 0, [employees_group.id])],
|
||
|
})
|
||
|
|
||
|
bi_view2 = self.env['bve.view'].create(vals)
|
||
|
self.assertEqual(len(bi_view2.user_ids), len(employees_group.users))
|
||
|
|
||
|
def test_07_check_empty_data(self):
|
||
|
vals = {
|
||
|
'name': 'Test View Empty',
|
||
|
'state': 'draft',
|
||
|
'data': ''
|
||
|
}
|
||
|
bi_view4 = self.env['bve.view'].create(vals)
|
||
|
self.assertEqual(len(bi_view4), 1)
|
||
|
|
||
|
# create sql view
|
||
|
with self.assertRaises(UserError):
|
||
|
bi_view4.action_create()
|
||
|
|
||
|
def test_08_get_models(self):
|
||
|
Model = self.env['ir.model']
|
||
|
models = Model.get_models()
|
||
|
self.assertIsInstance(models, list)
|
||
|
self.assertGreater(len(models), 0)
|
||
|
|
||
|
@at_install(False)
|
||
|
@post_install(True)
|
||
|
def test_09_create_open_bve_object(self):
|
||
|
vals = self.bi_view1_vals
|
||
|
employees_group = self.env.ref('base.group_user')
|
||
|
vals.update({
|
||
|
'name': 'Test View4',
|
||
|
'group_ids': [(6, 0, [employees_group.id])],
|
||
|
})
|
||
|
bi_view = self.env['bve.view'].create(vals)
|
||
|
self.assertEqual(len(bi_view), 1)
|
||
|
|
||
|
# create bve object
|
||
|
bi_view.action_create()
|
||
|
model = self.env['ir.model'].search([
|
||
|
('model', '=', 'x_bve.testview4'),
|
||
|
('name', '=', 'Test View4')
|
||
|
])
|
||
|
self.assertEqual(len(model), 1)
|
||
|
|
||
|
# open view
|
||
|
open_action = bi_view.open_view()
|
||
|
self.assertEqual(isinstance(open_action, dict), True)
|
||
|
|
||
|
# try to remove view
|
||
|
with self.assertRaises(UserError):
|
||
|
bi_view.unlink()
|
||
|
|
||
|
@at_install(False)
|
||
|
@post_install(True)
|
||
|
def test_10_create_open_bve_object_apostrophe(self):
|
||
|
vals = self.bi_view1_vals
|
||
|
employees_group = self.env.ref('base.group_user')
|
||
|
vals.update({
|
||
|
'name': "Test View5",
|
||
|
'group_ids': [(6, 0, [employees_group.id])],
|
||
|
})
|
||
|
data_list = list()
|
||
|
for r in json.loads(vals['data']):
|
||
|
r['model_name'] = "model'name"
|
||
|
data_list.append(r)
|
||
|
new_format_data = json.dumps(data_list)
|
||
|
vals.update({'data': new_format_data})
|
||
|
bi_view = self.env['bve.view'].create(vals)
|
||
|
self.assertEqual(len(bi_view), 1)
|
||
|
# create bve object
|
||
|
bi_view.action_create()
|