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.

161 lines
5.7 KiB

  1. # Copyright 2020 Creu Blanca
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo.tests.common import TransactionCase
  4. from odoo.exceptions import ValidationError
  5. from odoo.tests.common import Form
  6. from mock import patch
  7. class TestKpiDashboard(TransactionCase):
  8. def setUp(self):
  9. super(TestKpiDashboard, self).setUp()
  10. self.kpi_01 = self.env['kpi.kpi'].create({
  11. 'name': 'KPI 01',
  12. 'computation_method': 'function',
  13. 'widget': 'number',
  14. 'function': 'test_demo_number'
  15. })
  16. self.kpi_02 = self.env['kpi.kpi'].create({
  17. 'name': 'KPI 02',
  18. 'computation_method': 'function',
  19. 'widget': 'number',
  20. 'function': 'test_demo_number'
  21. })
  22. self.dashboard = self.env['kpi.dashboard'].create({
  23. 'name': 'Dashboard',
  24. 'number_of_columns': 4,
  25. 'widget_dimension_x': 250,
  26. 'widget_dimension_y': 250,
  27. })
  28. self.env['kpi.dashboard.item'].create({
  29. 'dashboard_id': self.dashboard.id,
  30. 'kpi_id': self.kpi_01.id,
  31. 'name': self.kpi_01.name,
  32. 'row': 1,
  33. 'column': 1,
  34. })
  35. self.env['kpi.dashboard.item'].create({
  36. 'dashboard_id': self.dashboard.id,
  37. 'name': self.kpi_02.name,
  38. 'kpi_id': self.kpi_02.id,
  39. 'row': 1,
  40. 'column': 2,
  41. })
  42. self.env['kpi.dashboard.item'].create({
  43. 'dashboard_id': self.dashboard.id,
  44. 'name': 'TITLE',
  45. 'row': 2,
  46. 'column': 1,
  47. })
  48. def test_constrains_01(self):
  49. with self.assertRaises(ValidationError):
  50. self.kpi_01.dashboard_item_ids.write({'size_x': 2})
  51. def test_constrains_02(self):
  52. with self.assertRaises(ValidationError):
  53. self.kpi_02.dashboard_item_ids.write({'size_x': 4})
  54. def test_constrains_03(self):
  55. with self.assertRaises(ValidationError):
  56. self.kpi_01.dashboard_item_ids.write({'size_y': 11})
  57. def test_menu(self):
  58. self.assertFalse(self.dashboard.menu_id)
  59. wzd = self.env['kpi.dashboard.menu'].create({
  60. 'dashboard_id': self.dashboard.id,
  61. 'menu_id': self.env['ir.ui.menu'].search([], limit=1).id,
  62. })
  63. wzd.generate_menu()
  64. self.assertTrue(self.dashboard.menu_id)
  65. self.assertFalse(self.dashboard.menu_id.groups_id)
  66. self.dashboard.write({
  67. 'group_ids': [
  68. (6, 0, self.env['res.groups'].search([], limit=1).ids)]
  69. })
  70. self.assertTrue(self.dashboard.menu_id.groups_id)
  71. def test_onchange(self):
  72. with Form(self.env['kpi.dashboard']) as dashboard:
  73. dashboard.name = 'New Dashboard'
  74. with dashboard.item_ids.new() as item:
  75. item.kpi_id = self.kpi_01
  76. self.assertTrue(item.name)
  77. def test_read_dashboard(self):
  78. data = self.dashboard.read_dashboard()
  79. title_found = False
  80. actions = 0
  81. for item in data['item_ids']:
  82. if not item.get('kpi_id'):
  83. title_found = True
  84. if item.get('actions', False):
  85. actions += len(item['actions'])
  86. self.assertTrue(title_found)
  87. self.assertEqual(0, actions)
  88. act01 = self.env['ir.actions.act_window'].search(
  89. [], limit=1)
  90. self.env['kpi.kpi.action'].create({
  91. 'kpi_id': self.kpi_01.id,
  92. 'action': '%s,%s' % (act01._name, act01.id)
  93. })
  94. act02 = self.env['ir.actions.act_url'].search(
  95. [], limit=1)
  96. self.env['kpi.kpi.action'].create({
  97. 'kpi_id': self.kpi_01.id,
  98. 'action': '%s,%s' % (act02._name, act02.id)
  99. })
  100. data = self.dashboard.read_dashboard()
  101. title_found = False
  102. actions = 0
  103. for item in data['item_ids']:
  104. if not item.get('kpi_id'):
  105. title_found = True
  106. if item.get('actions', False):
  107. actions += len(item['actions'])
  108. self.assertTrue(title_found)
  109. self.assertEqual(2, actions)
  110. self.assertFalse(data.get("action_id", False))
  111. wzd = self.env['kpi.dashboard.menu'].create({
  112. 'dashboard_id': self.dashboard.id,
  113. 'menu_id': self.env['ir.ui.menu'].search([], limit=1).id,
  114. })
  115. wzd.generate_menu()
  116. data = self.dashboard.read_dashboard()
  117. self.assertTrue(data.get("action_id", False))
  118. def test_compute(self):
  119. self.assertFalse(self.kpi_01.value_last_update)
  120. with patch(
  121. "odoo.addons.kpi_dashboard.models.kpi_kpi."
  122. "KpiKpi.test_demo_number", create=True
  123. ) as f:
  124. f.return_value = {"value": 0}
  125. self.kpi_01.compute()
  126. self.assertTrue(self.kpi_01.value_last_update)
  127. def test_compute_model(self):
  128. self.assertFalse(self.kpi_01.value_last_update)
  129. self.kpi_01.model_id = self.env.ref('base.model_res_partner')
  130. with patch(
  131. "odoo.addons.base.models.res_partner.Partner.test_demo_number",
  132. create=True
  133. ) as f:
  134. f.return_value = {"value": 0}
  135. self.kpi_01.compute()
  136. self.assertTrue(self.kpi_01.value_last_update)
  137. def test_generate_cron(self):
  138. self.assertFalse(self.kpi_01.cron_id)
  139. self.kpi_01.generate_cron()
  140. self.assertTrue(self.kpi_01.cron_id)
  141. self.assertFalse(self.kpi_01.value_last_update)
  142. with patch(
  143. "odoo.addons.kpi_dashboard.models.kpi_kpi."
  144. "KpiKpi.test_demo_number", create=True
  145. ) as f:
  146. f.return_value = {"value": 0}
  147. self.kpi_01.cron_id.method_direct_trigger()
  148. self.assertTrue(self.kpi_01.value_last_update)