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.

165 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. def test_constrains_02(self):
  58. with self.assertRaises(ValidationError):
  59. self.kpi_02.dashboard_item_ids.write({"size_x": 4})
  60. def test_constrains_03(self):
  61. with self.assertRaises(ValidationError):
  62. self.kpi_01.dashboard_item_ids.write({"size_y": 11})
  63. def test_menu(self):
  64. self.assertFalse(self.dashboard.menu_id)
  65. wzd = self.env["kpi.dashboard.menu"].create(
  66. {
  67. "dashboard_id": self.dashboard.id,
  68. "menu_id": self.env["ir.ui.menu"].search([], limit=1).id,
  69. }
  70. )
  71. wzd.generate_menu()
  72. self.assertTrue(self.dashboard.menu_id)
  73. self.assertFalse(self.dashboard.menu_id.groups_id)
  74. self.dashboard.write(
  75. {"group_ids": [(6, 0, self.env["res.groups"].search([], limit=1).ids)]}
  76. )
  77. self.assertTrue(self.dashboard.menu_id.groups_id)
  78. def test_onchange(self):
  79. with Form(self.env["kpi.dashboard"]) as dashboard:
  80. dashboard.name = "New Dashboard"
  81. with dashboard.item_ids.new() as item:
  82. item.kpi_id = self.kpi_01
  83. self.assertTrue(item.name)
  84. def test_read_dashboard(self):
  85. data = self.dashboard.read_dashboard()
  86. title_found = False
  87. actions = 0
  88. for item in data["item_ids"]:
  89. if not item.get("kpi_id"):
  90. title_found = True
  91. if item.get("actions", False):
  92. actions += len(item["actions"])
  93. self.assertTrue(title_found)
  94. self.assertEqual(0, actions)
  95. act01 = self.env["ir.actions.act_window"].search([], limit=1)
  96. self.env["kpi.kpi.action"].create(
  97. {"kpi_id": self.kpi_01.id, "action": "{},{}".format(act01._name, act01.id)}
  98. )
  99. act02 = self.env["ir.actions.act_url"].search([], limit=1)
  100. self.env["kpi.kpi.action"].create(
  101. {"kpi_id": self.kpi_01.id, "action": "{},{}".format(act02._name, act02.id)}
  102. )
  103. data = self.dashboard.read_dashboard()
  104. title_found = False
  105. actions = 0
  106. for item in data["item_ids"]:
  107. if not item.get("kpi_id"):
  108. title_found = True
  109. if item.get("actions", False):
  110. actions += len(item["actions"])
  111. self.assertTrue(title_found)
  112. self.assertEqual(2, actions)
  113. self.assertFalse(data.get("action_id", False))
  114. wzd = self.env["kpi.dashboard.menu"].create(
  115. {
  116. "dashboard_id": self.dashboard.id,
  117. "menu_id": self.env["ir.ui.menu"].search([], limit=1).id,
  118. }
  119. )
  120. wzd.generate_menu()
  121. data = self.dashboard.read_dashboard()
  122. self.assertTrue(data.get("action_id", False))
  123. def test_compute(self):
  124. self.assertFalse(self.kpi_01.value_last_update)
  125. with patch(
  126. "odoo.addons.kpi_dashboard.models.kpi_kpi." "KpiKpi.test_demo_number",
  127. create=True,
  128. ) as f:
  129. f.return_value = {"value": 0}
  130. self.kpi_01.compute()
  131. self.assertTrue(self.kpi_01.value_last_update)
  132. def test_compute_model(self):
  133. self.assertFalse(self.kpi_01.value_last_update)
  134. self.kpi_01.model_id = self.env.ref("base.model_res_partner")
  135. with patch(
  136. "odoo.addons.base.models.res_partner.Partner.test_demo_number", create=True
  137. ) as f:
  138. f.return_value = {"value": 0}
  139. self.kpi_01.compute()
  140. self.assertTrue(self.kpi_01.value_last_update)
  141. def test_generate_cron(self):
  142. self.assertFalse(self.kpi_01.cron_id)
  143. self.kpi_01.generate_cron()
  144. self.assertTrue(self.kpi_01.cron_id)
  145. self.assertFalse(self.kpi_01.value_last_update)
  146. with patch(
  147. "odoo.addons.kpi_dashboard.models.kpi_kpi." "KpiKpi.test_demo_number",
  148. create=True,
  149. ) as f:
  150. f.return_value = {"value": 0}
  151. self.kpi_01.cron_id.method_direct_trigger()
  152. self.assertTrue(self.kpi_01.value_last_update)