oca-technical/odoo-bringout-oca-hack-payroll/payroll/tests/test_hr_payslip_change_state.py
2025-08-29 15:43:03 +02:00

60 lines
2.5 KiB
Python

# Copyright 2019 - Eficent http://www.eficent.com/
# Copyright 2019 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo.exceptions import UserError
from odoo.addons.payroll.tests.test_hr_payroll_cancel import TestHrPayrollCancel
class TestHrPayslipChangeState(TestHrPayrollCancel):
def setUp(self):
super(TestHrPayslipChangeState, self).setUp()
self.tested_model = self.env["hr.payslip.change.state"]
def test_change_state(self):
hr_payslip = self._create_payslip()
tested_model = self.tested_model
context = {"active_ids": [hr_payslip.id]}
action = tested_model.with_context(context).create({"state": "verify"})
# By default, a payslip is on draft state
action.change_state_confirm()
# trying to set it to wrong states
with self.assertRaises(UserError):
action.write({"state": "draft"})
action.change_state_confirm()
# Now the payslip should be computed but in verify state
self.assertEqual(hr_payslip.state, "verify")
self.assertNotEqual(hr_payslip.number, None)
action.write({"state": "done"})
action.change_state_confirm()
# Now the payslip should be confirmed
self.assertEqual(hr_payslip.state, "done")
# trying to set it to wrong states
with self.assertRaises(UserError):
action.write({"state": "draft"})
action.change_state_confirm()
with self.assertRaises(UserError):
action.write({"state": "verify"})
action.change_state_confirm()
with self.assertRaises(UserError):
action.write({"state": "done"})
action.change_state_confirm()
action.write({"state": "cancel"})
action.change_state_confirm()
# Now the payslip should be canceled
self.assertEqual(hr_payslip.state, "cancel")
# trying to set it to wrong states
with self.assertRaises(UserError):
action.write({"state": "done"})
action.change_state_confirm()
with self.assertRaises(UserError):
action.write({"state": "verify"})
action.change_state_confirm()
with self.assertRaises(UserError):
action.write({"state": "cancel"})
action.change_state_confirm()
action.write({"state": "draft"})
action.change_state_confirm()
# again, it should be draft. Also checking if wrong changes happened
self.assertEqual(hr_payslip.state, "draft")