odex30_standard/employee_requests/tests/test_employee_department_jo...

88 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
from odoo.tests.common import TransactionCase
from odoo.exceptions import UserError
from odoo import fields
from dateutil.relativedelta import relativedelta
class TestEmployeeDepartmentJobs(TransactionCase):
def setUp(self):
super(TestEmployeeDepartmentJobs, self).setUp()
self.manager_employee = self.env['hr.employee'].create({
'name': 'Big Manager',
})
self.dep1 = self.env['hr.department'].create({
'name': 'IT Department',
'manager_id': self.manager_employee.id,
})
self.dep2 = self.env['hr.department'].create({
'name': 'HR Department',
'manager_id': self.manager_employee.id,
})
self.job1 = self.env['hr.job'].create({'name': 'Developer', 'department_id': self.dep1.id})
self.job2 = self.env['hr.job'].create(
{'name': 'HR Officer', 'department_id': self.dep2.id, 'no_of_recruitment': 1})
self.job_full = self.env['hr.job'].create(
{'name': 'Manager', 'department_id': self.dep2.id, 'no_of_recruitment': 0})
self.employee = self.env['hr.employee'].create({
'name': 'Test Employee Job',
'department_id': self.dep1.id,
'job_id': self.job1.id,
'parent_id': self.manager_employee.id, # ربطه بالمدير
'first_hiring_date': fields.Date.today() - relativedelta(years=2),
'joining_date': fields.Date.today() - relativedelta(years=1),
})
def test_prevent_job_change_no_vacancy(self):
req = self.env['employee.department.jobs'].new({
'employee_id': self.employee.id,
'new_department_id': self.dep2.id,
'new_job_id': self.job_full.id, # 0 vacancies
})
with self.assertRaises(UserError, msg="Should raise error when no recruitment spots available"):
req.not_reused_same_dep_job()
def test_update_employee_data_on_approval(self):
request = self.env['employee.department.jobs'].create({
'employee_id': self.employee.id,
'promotion_type': 'both',
'new_department_id': self.dep2.id,
'new_job_id': self.job2.id,
'date': fields.Date.today(),
'state': 'hr_manager',
})
request.store_level_group_and_degree_values()
request.approved()
self.assertEqual(self.employee.department_id.id, self.dep2.id, "Department not updated")
self.assertEqual(self.employee.job_id.id, self.job2.id, "Job not updated")
self.assertEqual(self.employee.joining_date, fields.Date.today(), "Joining date not updated")
def test_service_duration_calculation(self):
today = fields.Date.today()
one_year_one_month_ago = today - relativedelta(years=1, months=1)
self.employee.joining_date = one_year_one_month_ago
request = self.env['employee.department.jobs'].create({
'employee_id': self.employee.id,
'date': today,
})
request.store_level_group_and_degree_values()
request._compute_duration()
self.assertEqual(request.service_year, 1, "Service year calculation wrong")
self.assertEqual(request.service_month, 1, "Service month calculation wrong")
self.assertEqual(request.service_day, 0, "Service day calculation wrong")