Files
enterprise-addons/hr_contract_salary/tests/test_link_expiration_date.py
T

145 lines
5.9 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import datetime
from freezegun import freeze_time
from dateutil.relativedelta import relativedelta
from odoo.addons.mail.tests.common import mail_new_test_user
from odoo.tests import Form
from odoo.tests.common import HttpCase, tagged
@tagged('-at_install', 'post_install')
class TestLinkExpirationDate(HttpCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.offer_date = datetime.date(2022, 1, 14)
cls.validity_period = 30
cls.fail_text = 'This link is invalid. Please contact the HR Responsible to get a new one...'
cls.structure_type = cls.env['hr.payroll.structure.type'].create({'name': 'struct'})
cls.job = cls.env['hr.job'].create({
'name': 'Familiar job',
})
cls.simple_user = mail_new_test_user(
cls.env,
name='Nandor Relentless',
login='Al Qolnidar',
email='Nandor@odoo.com',
groups='base.group_user',
)
cls.employee = cls.env['hr.employee'].create({'name': "Nandor", 'user_id': cls.simple_user.id})
cls.offer_refusal_reason = cls.env['hr.contract.salary.offer.refusal.reason'].create({
'name': "Salary too high",
})
def test_access_token_on_change(self):
self.env['hr.version'].create({
'name': "Contract",
'wage': 6500,
'structure_type_id': self.structure_type.id,
'job_id': self.job.id,
})
applicant = self.env["hr.applicant"].create(
{
"partner_name": "Guillermo De La Cruz",
"email_from": "Guillermo@example.com",
}
)
job = self.env['hr.job'].create({'name': 'Edge Runner'})
contract_template = self.env['hr.version'].create({
'job_id': job.id,
'name': "Template Maze Runner Contract",
'wage': 6500,
})
offer = self.env["hr.contract.salary.offer"].create({
"applicant_id": applicant.id,
"contract_template_id": contract_template.id,
})
with Form(offer.browse().with_context(active_id=offer.id, default_contract_template_id=contract_template.id, default_applicant_id=applicant.id)) as offer_form:
self.assertTrue(offer_form.access_token)
def test_generate_offer_by_hr_user(self):
"""Test that HR & Recruitment user can generate salary offer for applicant"""
hr_user = mail_new_test_user(
self.env,
name='HR Officer User',
login='hr_officer_user',
groups='hr.group_hr_user,hr_recruitment.group_hr_recruitment_user'
)
self.env['hr.version'].create({
'name': "Contract Template",
'final_yearly_costs': 6500,
'job_id': self.job.id,
})
applicant = self.env['hr.applicant'].create({
'partner_name': 'Guillermo De La Cruz',
'email_from': 'Guillermo@example.com',
})
applicant.with_user(hr_user).action_generate_offer()
self.assertEqual(applicant.salary_offers_count, 1)
def test_link_for_applicant(self):
"""
Applicant should be able to access salary configurator before the link Expires.
After the link expiration date, applicant should be redirected to the invalid link page.
"""
# If there is no demo version templates, then creating a version as follows will be necessary.
# Otherwise, the following version creation can be deleted.
self.env['hr.version'].create({
'name': "Contract Template",
'wage': 6500,
'structure_type_id': self.structure_type.id,
'job_id': self.job.id,
})
applicant = self.env["hr.applicant"].create(
{
"partner_name": "Guillermo De La Cruz",
"email_from": "Guillermo@example.com",
}
)
with freeze_time(self.offer_date):
applicant.action_generate_offer()
offer = applicant.salary_offer_ids
offer.offer_end_date = self.offer_date + relativedelta(days=30)
url = f'/salary_package/simulation/offer/{offer.id}?token={offer.access_token}'
res = self.url_open(url)
self.assertTrue(self.fail_text not in str(res.content),
"The applicant should not be redirected to the invalid link page")
with freeze_time(self.offer_date + relativedelta(days=self.validity_period + 1)):
late_res = self.url_open(url)
self.assertTrue(self.fail_text in str(late_res.content),
'The applicant should be redirected to the invalid link page')
def test_link_for_employee(self):
self.employee.version_id.write({
'wage': 6500,
'structure_type_id': self.structure_type.id,
'job_id': self.job.id,
})
employee_version = self.employee.version_id
with freeze_time(self.offer_date):
employee_version.action_generate_offer()
offer = employee_version.salary_offer_ids
offer.offer_end_date = self.offer_date + relativedelta(days=30)
url = f'/salary_package/simulation/offer/{offer.id}'
self.authenticate(self.simple_user.login, self.simple_user.login)
res = self.url_open(url)
self.assertTrue(self.fail_text not in str(res.content),
"The Employee should not be redirected to the invalid link page")
with freeze_time(self.offer_date + relativedelta(days=self.validity_period + 1)):
self.authenticate(self.simple_user.login, self.simple_user.login)
late_res = self.url_open(url)
self.assertTrue(self.fail_text in str(late_res.content),
'The Employee should be redirected to the invalid link page')