Files
enterprise-addons/hr_contract_salary/tests/test_employee_salary_configurator.py

223 lines
9.2 KiB
Python

from freezegun import freeze_time
from datetime import date
import odoo.tests
import base64
from odoo.tools import file_open
@odoo.tests.tagged('-at_install', 'post_install', 'salary')
class TestEmployeeSalaryConfigurator(odoo.tests.HttpCase):
@classmethod
@freeze_time('2022-01-01 09:00:00')
def setUpClass(cls):
super().setUpClass()
with file_open('hr_contract_salary/static/src/demo/employee_contract.pdf', "rb") as f:
cls.pdf_content = f.read()
attachment = cls.env['ir.attachment'].create({
'type': 'binary',
'raw': cls.pdf_content,
'name': 'test_employee_contract.pdf',
})
cls.template = cls.env['sign.template'].create({})
cls.document_id = cls.env['sign.document'].create({
'attachment_id': attachment.id,
'template_id': cls.template.id,
})
cls.env['sign.item'].create([
{
'type_id': cls.env.ref('sign.sign_item_type_text').id,
'name': 'employee_id.name',
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_employee_signatory').id,
'page': 1,
'posX': 0.273,
'posY': 0.158,
'document_id': cls.document_id.id,
'width': 0.150,
'height': 0.015,
}, {
'type_id': cls.env.ref('sign.sign_item_type_date').id,
'name': False,
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_employee_signatory').id,
'page': 1,
'posX': 0.707,
'posY': 0.158,
'document_id': cls.document_id.id,
'width': 0.150,
'height': 0.015,
}, {
'type_id': cls.env.ref('sign.sign_item_type_text').id,
'name': 'private_city',
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_employee_signatory').id,
'page': 1,
'posX': 0.506,
'posY': 0.184,
'document_id': cls.document_id.id,
'width': 0.150,
'height': 0.015,
}, {
'type_id': cls.env.ref('sign.sign_item_type_text').id,
'name': 'private_country_id.name',
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_employee_signatory').id,
'page': 1,
'posX': 0.663,
'posY': 0.184,
'document_id': cls.document_id.id,
'width': 0.150,
'height': 0.015,
}, {
'type_id': cls.env.ref('sign.sign_item_type_text').id,
'name': 'private_street',
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_employee_signatory').id,
'page': 1,
'posX': 0.349,
'posY': 0.184,
'document_id': cls.document_id.id,
'width': 0.150,
'height': 0.015,
}, {
'type_id': cls.env.ref('sign.sign_item_type_signature').id,
'name': False,
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_job_responsible').id,
'page': 2,
'posX': 0.333,
'posY': 0.575,
'document_id': cls.document_id.id,
'width': 0.200,
'height': 0.050,
}, {
'type_id': cls.env.ref('sign.sign_item_type_signature').id,
'name': False,
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_employee_signatory').id,
'page': 2,
'posX': 0.333,
'posY': 0.665,
'document_id': cls.document_id.id,
'width': 0.200,
'height': 0.050,
}, {
'type_id': cls.env.ref('sign.sign_item_type_date').id,
'name': False,
'required': True,
'responsible_id': cls.env.ref('hr_sign.sign_item_role_employee_signatory').id,
'page': 2,
'posX': 0.665,
'posY': 0.694,
'document_id': cls.document_id.id,
'width': 0.150,
'height': 0.015,
}
])
cls.company_id = cls.env['res.company'].create({
'name': 'Rambo Company - TEST',
'country_id': cls.env.ref('base.be').id,
})
with file_open('sign/static/demo/signature.png', "rb") as f:
img_content = base64.b64encode(f.read())
cls.env.ref('base.user_admin').write({
'company_ids': [(4, cls.company_id.id)],
'company_id': cls.company_id.id,
'name': 'Mitchell Admin',
'sign_signature': img_content,
})
cls.env.ref('base.user_admin').partner_id.write({
'email': '[email protected]',
'name': 'Mitchell Admin',
'street': '215 Vine St',
'city': 'Scranton',
'zip': '18503',
'country_id': cls.env.ref('base.us').id,
'state_id': cls.env.ref('base.state_us_39').id,
'phone': '+1 555-555-5555',
'tz': 'Europe/Brussels',
'company_id': cls.company_id.id,
})
cls.env.ref('base.main_partner').email = "[email protected]"
cls.senior_dev_contract = cls.env['hr.version'].create({
'name': 'Senior Developer Template Contract',
'wage': 6000,
'structure_type_id': cls.env.ref('hr.structure_type_employee').id,
'sign_template_id': cls.template.id,
'contract_update_template_id': cls.template.id,
'hr_responsible_id': cls.env.ref('base.user_admin').id,
'company_id': cls.company_id.id,
})
cls.job = cls.env['hr.job'].create({
'name': 'Senior Developer BE',
'company_id': cls.company_id.id,
'contract_template_id': cls.senior_dev_contract.id,
'user_id': cls.env.ref('base.user_admin').id,
})
cls.employee_1 = cls.env['hr.employee'].create({
'name': 'Ahmed Abdelrazek',
'date_version': date(2020, 1, 1),
'contract_date_start': date(2020, 1, 1),
'contract_date_end': False,
'private_country_id': cls.env.ref('base.be').id,
'private_state_id': cls.env.ref('base.state_be_1').id,
'company_id': cls.company_id.id,
'job_id': cls.job.id,
'sign_template_id': cls.template.id,
'contract_update_template_id': cls.template.id,
'hr_responsible_id': cls.env.ref('base.user_admin').id,
'work_email': 'ahmed.abdelrazek@test_email.com',
})
def test_employee_salary_configurator_amendment_flow(self):
employee = self.employee_1
with freeze_time("2022-01-01 12:00:00"):
self.start_tour("/", 'hr_contract_salary_employee_flow_tour', login='admin', timeout=350)
offers = self.env['hr.contract.salary.offer'].search([('employee_id', '=', employee.id)])
self.assertTrue(offers)
latest_offer = offers[-1]
self.assertTrue(latest_offer.is_contract_amendment)
with freeze_time("2022-01-01 13:00:00"):
self.start_tour("/", 'hr_contract_salary_employee_flow_tour_counter_sign', login='admin', timeout=350)
versions = employee.version_ids
self.assertEqual(len(versions), 2)
previous_version = versions[-2]
amendment_version = versions[-1]
self.assertEqual(amendment_version.contract_date_start, date(2020, 1, 1))
self.assertEqual(amendment_version.date_version, date(2022, 1, 1))
self.assertFalse(amendment_version.contract_date_end)
self.assertFalse(previous_version.contract_date_end)
def test_employee_salary_configurator_new_contract_flow(self):
employee = self.employee_1
employee.version_id.contract_date_end = date(2022, 6, 1)
with freeze_time("2023-01-01 10:00:00"):
self.start_tour("/", 'hr_contract_salary_employee_flow_tour', login='admin', timeout=350)
offers = self.env['hr.contract.salary.offer'].search([('employee_id', '=', employee.id)])
self.assertTrue(offers)
new_contract_offer = offers.sorted('create_date')[-1]
self.assertFalse(new_contract_offer.is_contract_amendment)
with freeze_time("2023-01-01 11:00:00"):
self.start_tour("/", 'hr_contract_salary_employee_flow_tour_counter_sign', login='admin', timeout=350)
final_contract = self.env['hr.version'].search([('employee_id', '=', employee.id)], order='date_version desc', limit=1)
self.assertEqual(final_contract.contract_date_start, date(2023, 1, 1))
self.assertEqual(final_contract.date_version, date(2023, 1, 1))
self.assertFalse(final_contract.contract_date_end)