# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo.tests.common import TransactionCase class TestKPI(TransactionCase): def setUp(self): super(TestKPI, self).setUp() def test_invalid_threshold_range(self): range1 = self.env['kpi.threshold.range'].create({ 'name': 'Range1', 'min_type': 'static', 'max_type': 'static', 'min_fixed_value': 3, 'max_fixed_value': 1, }) range2 = self.env['kpi.threshold.range'].create({ 'name': 'Range2', 'min_type': 'static', 'max_type': 'static', 'min_fixed_value': 4, 'max_fixed_value': 10, }) self.assertFalse(range1.valid) self.assertTrue(range2.valid) def test_invalid_threshold(self): range1 = self.env['kpi.threshold.range'].create({ 'name': 'Range1', 'min_type': 'static', 'max_type': 'static', 'min_fixed_value': 1, 'max_fixed_value': 4, }) range2 = self.env['kpi.threshold.range'].create({ 'name': 'Range2', 'min_type': 'static', 'max_type': 'static', 'min_fixed_value': 4, 'max_fixed_value': 10, }) range3 = self.env['kpi.threshold.range'].create({ 'name': 'Range3', 'min_type': 'static', 'max_type': 'static', 'min_fixed_value': 1, 'max_fixed_value': 3, }) range_invalid = self.env['kpi.threshold.range'].create({ 'name': 'RangeInvalid', 'min_type': 'static', 'max_type': 'static', 'min_fixed_value': 3, 'max_fixed_value': 1, }) threshold1 = self.env['kpi.threshold'].create({ 'name': 'Threshold1', 'range_ids': [(6, 0, [range1.id, range2.id])], }) threshold2 = self.env['kpi.threshold'].create({ 'name': 'Threshold1', 'range_ids': [(6, 0, [range3.id, range2.id])], }) threshold3 = self.env['kpi.threshold'].create({ 'name': 'Threshold1', 'range_ids': [(6, 0, [range_invalid.id, range2.id])], }) self.assertFalse(threshold1.valid) self.assertTrue(threshold2.valid) self.assertFalse(threshold3.valid) def test_invalid_threshold_range_exception(self): range_error = self.env['kpi.threshold.range'].create({ 'name': 'RangeError', 'min_type': 'python', 'min_code': '', 'max_type': 'static', 'max_fixed_value': 1, }) self.assertFalse(range_error.valid) def test_kpi_python(self): kpi_category = self.env['kpi.category'].create({ 'name': 'Dynamic KPIs' }) kpi_threshold = self.env['kpi.threshold'].create({ 'name': 'KPI Threshold for dynamic KPIs' }) kpi_code = """ { 'value': 1.0, 'color': '#00FF00' } """ kpi = self.env['kpi'].create({ 'name': 'Dynamic python kpi', 'description': 'Dynamic python kpi', 'category_id': kpi_category.id, 'threshold_id': kpi_threshold.id, 'periodicity': 1, 'periodicity_uom': 'day', 'kpi_type': 'python', 'kpi_code': kpi_code, }) kpi.update_kpi_value() kpi_history = self.env['kpi.history'].search( [('kpi_id', '=', kpi.id)]) self.assertEqual(len(kpi_history), 1) self.assertEqual(kpi_history.color, '#00FF00') self.assertEqual(kpi_history.value, 1.0)