Files
enterprise-addons/hr_appraisal_survey/tests/test_hr_appraisal_feedback_controller.py
T

130 lines
5.4 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import datetime
from freezegun import freeze_time
from odoo.addons.mail.tests.common import mail_new_test_user
from odoo.tests.common import HttpCase, tagged
@tagged('-at_install', 'post_install')
class TestHrAppraisalFeedbackController(HttpCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.user = mail_new_test_user(
cls.env,
name='Test Appraisal',
login='TestAppraisal',
email='test@test.com',
groups='base.group_user',
)
cls.user_appraisal_officer = mail_new_test_user(
cls.env,
name='Appraisal Officer',
login='AppraisalOfficer',
email='appraisal_officer@test.com',
groups='hr_appraisal.group_hr_appraisal_user',
)
cls.user_manager = mail_new_test_user(
cls.env,
name='User Manager',
login='UserManager',
email='user_manager@test.com',
)
cls.user_employee = cls.env['hr.employee'].create({
'name': 'Me Myself and I',
'user_id': cls.user.id
})
cls.appraisal_officer = cls.env['hr.employee'].create({
'name': 'Mr. Appraisal Officer',
'user_id': cls.user_appraisal_officer.id
})
cls.manager = cls.env['hr.employee'].create({
'name': 'Mr. Manager',
'user_id': cls.user_manager.id
})
cls.appraisal = cls.env['hr.appraisal'].create({
'employee_id': cls.user_employee.id,
'manager_ids': [cls.manager.id],
'state': '2_pending',
})
cls.appraisal_survey = cls.env['survey.survey'].create({
'title': 'appraisal feedback',
'questions_layout': 'one_page',
'questions_selection': 'all',
'access_mode': 'public',
'survey_type': 'appraisal',
})
cls.question = cls.env['survey.question'].create({
'survey_id': cls.appraisal_survey.id,
'title': 'What is your name?',
'sequence': 1,
'question_type': 'char_box',
})
cls.survey_expired_text = "This survey is now closed. Thank you for your interest!"
def test_appraisal_feedback_link_expiration(self):
with freeze_time(datetime.date(2024, 9, 19)):
feedback = self.env['appraisal.ask.feedback'].create({
'appraisal_id': self.appraisal.id,
'employee_ids': [self.user_employee.id],
'deadline': datetime.date(2024, 9, 20),
'survey_template_id': self.appraisal_survey.id,
})
feedback.action_send()
answer = self.env['survey.user_input'].search([('appraisal_id', '=', self.appraisal.id)])
url = answer.get_start_url()
# link should be accessible before the deadline
self.authenticate(self.user.login, self.user.login)
res = self.url_open(url)
self.assertTrue(self.survey_expired_text not in str(res.content), "The link should not be expired before the deadline")
# link should be expired after the deadline
with freeze_time(datetime.date(2024, 9, 21)):
res = self.url_open(url)
self.assertTrue(self.survey_expired_text in str(res.content), "The link should be expired after the deadline")
def test_appraisal_feedback_link_for_managers(self):
with freeze_time(datetime.date(2024, 9, 19)):
feedback = self.env['appraisal.ask.feedback'].create({
'appraisal_id': self.appraisal.id,
'employee_ids': [self.user_employee.id],
'deadline': datetime.date(2024, 9, 19),
'survey_template_id': self.appraisal_survey.id,
})
feedback.action_send()
answer = self.env['survey.user_input'].search([('appraisal_id', '=', self.appraisal.id)])
char_answer = "John Doe"
self.env['survey.user_input.line'].create({
'survey_id': self.appraisal_survey.id,
'user_input_id': answer.id,
'question_id': self.question.id,
'answer_type': 'numerical_box',
'value_char_box': char_answer,
'skipped': False,
})
url = answer.get_print_url()
with freeze_time(datetime.date(2024, 9, 21)):
self.authenticate(self.user_appraisal_officer.login, self.user_appraisal_officer.login)
res = self.url_open(url)
self.assertTrue(self.survey_expired_text not in str(res.content), "A user in Appraisal:Officer group should be able to access the survey answers after the deadline")
self.assertTrue(char_answer in str(res.content), "A user in Appraisal:Officer group should be able to see the survey answers")
with freeze_time(datetime.date(2024, 9, 21)):
self.authenticate(self.user_manager.login, self.user_manager.login)
res = self.url_open(url)
self.assertTrue(self.survey_expired_text not in str(res.content), "The manager of an appraisal should be able to access the survey answers after the deadline")
self.assertTrue(char_answer in str(res.content), "The manager of an appraisal should be able to see the survey answers")