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.

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