|
2 | 2 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
3 | 3 |
|
4 | 4 |
|
| 5 | +from unittest.mock import patch |
| 6 | + |
| 7 | +from odoo.exceptions import UserError |
5 | 8 | from odoo.tests.common import Form, TransactionCase
|
6 | 9 |
|
7 | 10 |
|
@@ -121,6 +124,13 @@ def test_02_timesheet_warnings(self):
|
121 | 124 | self.assertEqual(warning_item.warning_definition_id.id, warning_definition.id)
|
122 | 125 | self.assertEqual(warning_item.sheet_id.id, sheet.id)
|
123 | 126 |
|
| 127 | + warning_definition.write({"active": False}) |
| 128 | + sheet.action_generate_warnings() |
| 129 | + self.assertEqual(len(sheet.hr_timesheet_sheet_warning_item_ids), 0) |
| 130 | + warning_definition.write({"active": True}) |
| 131 | + sheet.action_generate_warnings() |
| 132 | + self.assertEqual(len(sheet.hr_timesheet_sheet_warning_item_ids), 1) |
| 133 | + |
124 | 134 | def test_03_timesheet_warnings_with_domain(self):
|
125 | 135 | sheet_form_1 = Form(self.sheet_model.with_user(self.user))
|
126 | 136 | sheet_form_1.date_start = "2024-02-05"
|
@@ -151,3 +161,47 @@ def test_03_timesheet_warnings_with_domain(self):
|
151 | 161 | sheet_2.action_generate_warnings()
|
152 | 162 | self.assertEqual(len(sheet_1.hr_timesheet_sheet_warning_item_ids), 1)
|
153 | 163 | self.assertEqual(len(sheet_2.hr_timesheet_sheet_warning_item_ids), 0)
|
| 164 | + |
| 165 | + def test_04_timesheet_warnings_on_confirm(self): |
| 166 | + sheet_form = Form(self.sheet_model.with_user(self.user)) |
| 167 | + sheet = sheet_form.save() |
| 168 | + with patch.object(type(sheet), "action_generate_warnings") as patched: |
| 169 | + sheet.action_timesheet_confirm() |
| 170 | + patched.assert_called_once_with() |
| 171 | + |
| 172 | + def test_05_timesheet_warning_items(self): |
| 173 | + sheet_form = Form(self.sheet_model.with_user(self.user)) |
| 174 | + sheet = sheet_form.save() |
| 175 | + warning_definition = self.sheet_warning_definition_model.create( |
| 176 | + { |
| 177 | + "name": "Test Warning Definition", |
| 178 | + "python_code": "sheet.total_time > 40", |
| 179 | + } |
| 180 | + ) |
| 181 | + sheet.write({"total_time": 45}) |
| 182 | + sheet.action_generate_warnings() |
| 183 | + warning_item = sheet.hr_timesheet_sheet_warning_item_ids |
| 184 | + |
| 185 | + default_display_name = ( |
| 186 | + warning_definition.display_name + " in " + sheet.complete_name |
| 187 | + ) |
| 188 | + self.assertEqual(warning_item.name, default_display_name) |
| 189 | + warning_item.write({"name": "Test Name"}) |
| 190 | + self.assertEqual(warning_item.name, "Test Name") |
| 191 | + warning_item._compute_name() |
| 192 | + self.assertEqual(warning_item.name, default_display_name) |
| 193 | + |
| 194 | + def test_06_timesheet_warning_definitions(self): |
| 195 | + sheet_form = Form(self.sheet_model.with_user(self.user)) |
| 196 | + sheet = sheet_form.save() |
| 197 | + warning_definition = self.sheet_warning_definition_model.create( |
| 198 | + { |
| 199 | + "name": "Test Warning Definition", |
| 200 | + "python_code": "123ABC", |
| 201 | + } |
| 202 | + ) |
| 203 | + |
| 204 | + with self.assertRaises(UserError): |
| 205 | + warning_definition.evaluate_definition(sheet) |
| 206 | + warning_definition.write({"python_code": "True"}) |
| 207 | + warning_definition.evaluate_definition(sheet) |
0 commit comments