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.

81 lines
2.4 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. class TestFormula(TransactionCase):
  6. def setUp(self):
  7. super().setUp()
  8. self.kpi = self.env["kpi.kpi"].create(
  9. {
  10. "name": "DEMO KPI",
  11. "widget": "number",
  12. "computation_method": "code",
  13. }
  14. )
  15. def test_forbidden_words_01(self):
  16. self.kpi.code = """
  17. result = {"value": 0}
  18. self.env.cr.commit()
  19. """
  20. with self.assertRaises(ValidationError):
  21. self.kpi.compute()
  22. def test_forbidden_words_02(self):
  23. self.kpi.code = """
  24. result = {"value": 0}
  25. self.env.cr.rollback()
  26. """
  27. with self.assertRaises(ValidationError):
  28. self.kpi.compute()
  29. def test_forbidden_words_03(self):
  30. self.kpi.code = """
  31. result = {"value": 0}
  32. self.env.cr.execute("CoMMiT")
  33. """
  34. with self.assertRaises(ValidationError):
  35. self.kpi.compute()
  36. def test_computation(self):
  37. self.assertFalse(self.kpi.value)
  38. self.kpi.compute()
  39. self.assertEqual(self.kpi.value, {})
  40. self.kpi.code = """
  41. result = {}
  42. result['value'] = len(model.search([('id', '=', %s)]))
  43. result['previous'] = len(model.search([('id', '!=', %s)]))
  44. """ % (
  45. self.kpi.id,
  46. self.kpi.id,
  47. )
  48. self.kpi.compute()
  49. value = self.kpi.value
  50. self.assertTrue(value.get("value"))
  51. self.assertEqual(value.get("value"), 1)
  52. self.assertEqual(value.get("previous"), self.kpi.search_count([]) - 1)
  53. self.assertFalse(self.kpi.history_ids)
  54. def test_computation_history(self):
  55. self.assertFalse(self.kpi.value)
  56. self.kpi.store_history = True
  57. self.kpi.compute()
  58. self.assertTrue(self.kpi.history_ids)
  59. self.assertEqual(self.kpi.value, {})
  60. self.kpi.code = """
  61. result = {}
  62. result['value'] = len(model.search([('id', '=', %s)]))
  63. result['previous'] = len(model.search([('id', '!=', %s)]))
  64. """ % (
  65. self.kpi.id,
  66. self.kpi.id,
  67. )
  68. self.kpi.compute()
  69. value = self.kpi.value
  70. self.assertTrue(value.get("value"))
  71. self.assertEqual(value.get("value"), 1)
  72. self.assertEqual(value.get("previous"), self.kpi.search_count([]) - 1)
  73. self.assertTrue(self.kpi.history_ids)