odex30_standard/exp_payroll_custom/tests/test_employee_promotions.py

148 lines
5.0 KiB
Python

from odoo.tests.common import TransactionCase, Form
from odoo.exceptions import UserError
from odoo.tests import tagged
from datetime import date
@tagged('post_install', '-at_install')
class TestEmployeePromotions(TransactionCase):
def setUp(cls):
super(TestEmployeePromotions, cls).setUp()
cls.structure_scale = cls.env['hr.payroll.structure'].create({
'name': 'General Scale',
'type': 'scale',
'code': 'SCL_TEST_01'
})
cls.level_1 = cls.env['hr.payroll.structure'].create({
'name': 'Level 1',
'type': 'level',
'salary_scale_id': cls.structure_scale.id,
'code': 'LVL_TEST_01'
})
cls.group_A = cls.env['hr.payroll.structure'].create({
'name': 'Group A',
'type': 'group',
'salary_scale_id': cls.structure_scale.id,
'salary_scale_level_id': cls.level_1.id,
'code': 'GRP_TEST_A'
})
cls.degree_1 = cls.env['hr.payroll.structure'].create({
'name': 'Degree 1',
'type': 'degree',
'salary_scale_id': cls.structure_scale.id,
'salary_scale_group_id': cls.group_A.id,
'base_salary': 5000.0,
'code': 'DEG_TEST_1'
})
cls.level_2 = cls.env['hr.payroll.structure'].create({
'name': 'Level 2',
'type': 'level',
'salary_scale_id': cls.structure_scale.id,
'code': 'LVL_TEST_02'
})
cls.group_B = cls.env['hr.payroll.structure'].create({
'name': 'Group B',
'type': 'group',
'salary_scale_id': cls.structure_scale.id,
'salary_scale_level_id': cls.level_2.id,
'code': 'GRP_TEST_B'
})
cls.degree_2 = cls.env['hr.payroll.structure'].create({
'name': 'Degree 2',
'type': 'degree',
'salary_scale_id': cls.structure_scale.id,
'salary_scale_group_id': cls.group_B.id,
'base_salary': 7000.0,
'code': 'DEG_TEST_2'
})
cls.employee = cls.env['hr.employee'].create({
'name': 'Test Employee',
'salary_scale': cls.structure_scale.id,
'salary_level': cls.level_1.id,
'salary_group': cls.group_A.id,
'salary_degree': cls.degree_1.id,
})
cls.contract = cls.env['hr.contract'].create({
'name': 'Test Contract',
'employee_id': cls.employee.id,
'wage': 5000.0,
'state': 'open',
'salary_level': cls.level_1.id,
'salary_group': cls.group_A.id,
'salary_degree': cls.degree_1.id,
})
cls.employee.contract_id = cls.contract
def test_01_promotion_workflow_full_cycle(self):
promotion_form = Form(self.env['employee.promotions'])
promotion_form.date = date.today()
promotion_form.employee_id = self.employee
self.assertEqual(promotion_form.old_degree, self.degree_1, "Should auto-fill old degree from employee")
promotion_form.new_level = self.level_2
promotion_form.new_group = self.group_B
promotion_form.new_degree = self.degree_2
promotion = promotion_form.save()
promotion.confirm()
self.assertEqual(promotion.state, 'confirm')
promotion.hr_manager()
self.assertEqual(promotion.state, 'hr_manager')
promotion.approved()
self.assertEqual(promotion.state, 'approved')
self.assertEqual(self.employee.contract_id.salary_degree, self.degree_2,
"Contract degree should be updated to new degree")
self.assertEqual(self.employee.contract_id.salary, 7000.0,
"Contract salary should be updated to new base salary")
def test_02_redraft_reverts_values(self):
promotion = self.env['employee.promotions'].create({
'date': date.today(),
'employee_id': self.employee.id,
'old_degree': self.degree_1.id,
'old_level_2': self.level_1.id,
'old_group_2': self.group_A.id,
'old_degree_2': self.degree_1.id,
'new_degree': self.degree_2.id,
'new_level': self.level_2.id,
'new_group': self.group_B.id,
})
promotion.approved()
self.assertEqual(self.employee.contract_id.salary_degree, self.degree_2)
promotion.re_draft()
self.assertEqual(promotion.state, 'draft')
self.assertEqual(self.employee.contract_id.salary_degree, self.degree_1,
"Should revert to old degree on re-draft")
def test_03_unlink_restriction(self):
promotion = self.env['employee.promotions'].create({
'date': date.today(),
'employee_id': self.employee.id,
'state': 'confirm'
})
with self.assertRaises(UserError):
promotion.unlink()
promotion.state = 'draft'
promotion.unlink()
self.assertFalse(promotion.exists())