Files
enterprise-addons/l10n_be_hr_contract_salary/tests/test_sign_contract.py
T

89 lines
3.8 KiB
Python

from datetime import date
from ...sign.tests.sign_request_common import SignRequestCommon
from odoo.addons.http_routing.tests.common import MockRequest
from ..controllers.main import SignContract
from ...hr_contract_salary.controllers import main
from odoo.tests.common import tagged
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestSignContract(SignRequestCommon):
def test_update_contract_on_signature_custom_logic(self):
"""Test _update_version_on_signature updates future driver and flags correctly"""
# Prepare contract and vehicles
company = self.env['res.company'].create({
'name': 'Test Belgium Company',
'country_id': self.env.ref('base.be').id,
})
employee = self.env['hr.employee'].create({
'name': 'John Tester',
'work_contact_id': self.partner_2.id,
'company_id': company.id,
'country_code': 'BE',
})
brand = self.env['fleet.vehicle.model.brand'].create({
'name': 'Test Brand',
})
model = self.env['fleet.vehicle.model'].create({
'name': 'Test Model',
'brand_id': brand.id,
})
car = self.env['fleet.vehicle'].create({
'model_id': model.id,
'plan_to_change_car': True,
})
version = self.env['hr.version'].create({
'name': 'Test Contract',
'employee_id': employee.id,
'car_id': car.id,
'date_start': date(2025, 1, 1),
'date_version': date(2025, 1, 1),
'wage': 1000,
'company_id': employee.company_id.id,
})
sign_request = self.create_sign_request_2_roles(self.partner_2, self.partner_3, self.env['res.partner'])
role2sign_request_item = {sign_request_item.role_id: sign_request_item for sign_request_item in sign_request.request_item_ids}
sign_request_item_signer_1 = role2sign_request_item[self.role_signer_1]
sign_request_item_signer_2 = role2sign_request_item[self.role_signer_2]
# Create a salary offer linked to the sign request
offer = self.env['hr.contract.salary.offer'].create({
'company_id': employee.company_id.id,
'contract_template_id': version.id,
'sign_request_ids': [(4, sign_request.id)],
'state': 'half_signed',
})
# Instantiate your custom controller and call the method
# Patch SignContract to inherit from the base SignContract, ensuring super() finds _update_version_on_signature (not in Sign)
SignContract.__bases__ = (main.SignContract,)
controller = SignContract()
# Employee signs the contract
sign_request_item_signer_1.sign(self.signer_1_sign_values_2_roles)
with MockRequest(sign_request.env):
controller._update_version_on_signature(sign_request_item_signer_1, version, offer)
# Assertions to verify that your custom logic is executed
self.assertEqual(version.car_id.future_driver_id, self.partner_2, "Car future driver should be updated")
self.assertFalse(version.car_id.plan_to_change_car, "Car should not be flagged for change")
# Add a new car request to the version
version.new_car = True
version.ordered_car_id = False
version.new_car_model_id = model
# Company (HR Responsible) signs the contract
sign_request_item_signer_2.sign(self.signer_2_sign_values_2_roles)
with MockRequest(sign_request.env):
controller._update_version_on_signature(sign_request_item_signer_2, version, offer)
self.assertEqual(version.car_id.future_driver_id, self.partner_2, "Car future driver should be updated")
self.assertFalse(version.car_id.plan_to_change_car, "Car should not be flagged for change")