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.

167 lines
5.9 KiB

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