OCA reporting engine fork for dev and update.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

253 lines
8.4 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2017 Onestein (<http://www.onestein.eu>)
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. import json
  5. from odoo.tests.common import TransactionCase, at_install, post_install
  6. from odoo.exceptions import UserError
  7. class TestBiViewEditor(TransactionCase):
  8. def setUp(self):
  9. def _get_models(model_name_list):
  10. Model = self.env['ir.model']
  11. return (Model.search(
  12. [('model', '=', name)]) for name in model_name_list)
  13. def _get_fields(model_field_list):
  14. ModelFields = self.env['ir.model.fields']
  15. return (ModelFields.search(
  16. [('model', '=', model_field[0]),
  17. ('name', '=', model_field[1])],
  18. limit=1) for model_field in model_field_list)
  19. def get_new_field(self):
  20. new_field = {
  21. 'model_id': self.partner_model.id,
  22. 'name': self.partner_field_name,
  23. 'custom': False,
  24. 'id': self.partner_field.id,
  25. 'model': self.partner_model_name,
  26. 'type': self.partner_field.ttype,
  27. 'model_name': self.partner_model.name,
  28. 'description': self.partner_field.field_description
  29. }
  30. return new_field
  31. super(TestBiViewEditor, self).setUp()
  32. self.partner_model_name = 'res.partner'
  33. self.partner_field_name = 'name'
  34. self.partner_company_field_name = 'company_id'
  35. self.company_model_name = 'res.company'
  36. self.company_field_name = 'name'
  37. self.bi_view1 = None
  38. self.partner_model, self.company_model = _get_models(
  39. [self.partner_model_name, self.company_model_name])
  40. (self.partner_field,
  41. self.partner_company_field,
  42. self.company_field) = _get_fields([
  43. (self.partner_model_name, self.partner_field_name),
  44. (self.partner_model_name, self.partner_company_field_name),
  45. (self.company_model_name, self.company_field_name)])
  46. data = [
  47. {'model_id': self.partner_model.id,
  48. 'name': self.partner_field_name,
  49. 'model_name': self.partner_model.name,
  50. 'model': self.partner_model_name,
  51. 'custom': 0,
  52. 'type': self.partner_field.ttype,
  53. 'id': self.partner_field.id,
  54. 'description': self.partner_field.field_description,
  55. 'table_alias': 't0',
  56. 'row': 0,
  57. 'column': 1,
  58. 'list': 1,
  59. 'measure': 0
  60. },
  61. {'model_id': self.partner_model.id,
  62. 'name': self.partner_company_field_name,
  63. 'table_alias': 't0',
  64. 'custom': 0,
  65. 'relation': self.company_model_name,
  66. 'model': self.partner_model_name,
  67. 'model_name': self.partner_model.name,
  68. 'type': self.partner_company_field.ttype,
  69. 'id': self.partner_company_field.id,
  70. 'join_node': 't1',
  71. 'description': self.partner_company_field.field_description,
  72. 'row': 0,
  73. 'column': 0,
  74. 'list': 1,
  75. 'measure': 0
  76. },
  77. {'model_id': self.company_model.id,
  78. 'name': 'name_1',
  79. 'model_name': self.company_model.name,
  80. 'model': self.company_model_name,
  81. 'custom': 0,
  82. 'type': self.company_field.ttype,
  83. 'id': self.company_field.id,
  84. 'description': self.company_field.field_description,
  85. 'table_alias': 't1',
  86. 'row': 1,
  87. 'column': 0,
  88. 'list': 0,
  89. 'measure': 0
  90. }
  91. ]
  92. format_data = json.dumps(data)
  93. self.bi_view1_vals = {
  94. 'state': 'draft',
  95. 'data': format_data
  96. }
  97. self.new_field = get_new_field(self)
  98. def test_01_get_fields(self):
  99. Model = self.env['ir.model']
  100. fields = Model.get_fields(self.partner_model.id)
  101. self.assertIsInstance(fields, list)
  102. self.assertGreater(len(fields), 0)
  103. def test_02_get_join_nodes(self):
  104. Fields = self.env['ir.model.fields']
  105. field_res_users = Fields.search([
  106. ('name', '=', 'login'),
  107. ('model', '=', 'res.users')
  108. ], limit=1)
  109. field_data = [{
  110. 'model_id': field_res_users.model_id.id,
  111. 'name': 'login',
  112. 'column': False,
  113. 'table_alias': 't0',
  114. 'custom': False,
  115. 'measure': False,
  116. 'id': field_res_users.id,
  117. 'model': 'res.users',
  118. 'row': False,
  119. 'type': 'char',
  120. 'model_name': 'Users',
  121. 'description': 'Login'
  122. }]
  123. new_field = self.new_field
  124. Model = self.env['ir.model']
  125. nodes = Model.get_join_nodes(field_data, new_field)
  126. self.assertIsInstance(nodes, list)
  127. self.assertGreater(len(nodes), 0)
  128. def test_03_get_join_nodes(self):
  129. new_field = self.new_field
  130. Model = self.env['ir.model']
  131. nodes = Model.get_join_nodes([], new_field)
  132. self.assertIsInstance(nodes, list)
  133. self.assertEqual(len(nodes), 0)
  134. def test_04_get_related_models(self):
  135. Model = self.env['ir.model']
  136. related_models = Model.get_related_models({
  137. 't0': self.partner_model.id,
  138. 't1': self.company_model.id
  139. })
  140. self.assertIsInstance(related_models, list)
  141. self.assertGreater(len(related_models), 0)
  142. def test_05_create_copy_view(self):
  143. vals = self.bi_view1_vals
  144. vals.update({'name': 'Test View1'})
  145. # create
  146. bi_view1 = self.env['bve.view'].create(vals)
  147. self.assertIsNotNone(bi_view1)
  148. self.assertEqual(len(bi_view1), 1)
  149. self.assertEqual(bi_view1.state, 'draft')
  150. # copy
  151. bi_view2 = bi_view1.copy()
  152. self.assertEqual(bi_view2.name, 'Test View1 (copy)')
  153. def test_06_create_group_bve_object(self):
  154. vals = self.bi_view1_vals
  155. employees_group = self.env.ref('base.group_user')
  156. vals.update({
  157. 'name': 'Test View2',
  158. 'group_ids': [(6, 0, [employees_group.id])],
  159. })
  160. bi_view2 = self.env['bve.view'].create(vals)
  161. self.assertEqual(len(bi_view2.user_ids), len(employees_group.users))
  162. def test_07_check_empty_data(self):
  163. vals = {
  164. 'name': 'Test View Empty',
  165. 'state': 'draft',
  166. 'data': ''
  167. }
  168. bi_view4 = self.env['bve.view'].create(vals)
  169. self.assertEqual(len(bi_view4), 1)
  170. # create sql view
  171. with self.assertRaises(UserError):
  172. bi_view4.action_create()
  173. def test_08_get_models(self):
  174. Model = self.env['ir.model']
  175. models = Model.get_models()
  176. self.assertIsInstance(models, list)
  177. self.assertGreater(len(models), 0)
  178. @at_install(False)
  179. @post_install(True)
  180. def test_09_create_open_bve_object(self):
  181. vals = self.bi_view1_vals
  182. employees_group = self.env.ref('base.group_user')
  183. vals.update({
  184. 'name': 'Test View4',
  185. 'group_ids': [(6, 0, [employees_group.id])],
  186. })
  187. bi_view = self.env['bve.view'].create(vals)
  188. self.assertEqual(len(bi_view), 1)
  189. # create bve object
  190. bi_view.action_create()
  191. model = self.env['ir.model'].search([
  192. ('model', '=', 'x_bve.testview4'),
  193. ('name', '=', 'Test View4')
  194. ])
  195. self.assertEqual(len(model), 1)
  196. # open view
  197. open_action = bi_view.open_view()
  198. self.assertEqual(isinstance(open_action, dict), True)
  199. # try to remove view
  200. with self.assertRaises(UserError):
  201. bi_view.unlink()
  202. @at_install(False)
  203. @post_install(True)
  204. def test_10_create_open_bve_object_apostrophe(self):
  205. vals = self.bi_view1_vals
  206. employees_group = self.env.ref('base.group_user')
  207. vals.update({
  208. 'name': "Test View5",
  209. 'group_ids': [(6, 0, [employees_group.id])],
  210. })
  211. l = list()
  212. for r in json.loads(vals['data']):
  213. r['model_name'] = "model'name"
  214. l.append(r)
  215. new_format_data = json.dumps(l)
  216. vals.update({'data': new_format_data})
  217. bi_view = self.env['bve.view'].create(vals)
  218. self.assertEqual(len(bi_view), 1)
  219. # create bve object
  220. bi_view.action_create()