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.

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