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.

229 lines
7.7 KiB

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