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.

59 lines
1.6 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)