test: Exit Interview
This commit is contained in:
parent
0a937dc050
commit
8db21e065c
@ -30,7 +30,7 @@
|
|||||||
"reference_document_name",
|
"reference_document_name",
|
||||||
"interview_summary_section",
|
"interview_summary_section",
|
||||||
"interviewers",
|
"interviewers",
|
||||||
"text_editor_12",
|
"interview_summary",
|
||||||
"employee_status_section",
|
"employee_status_section",
|
||||||
"employee_status",
|
"employee_status",
|
||||||
"amended_from"
|
"amended_from"
|
||||||
@ -112,11 +112,6 @@
|
|||||||
"fieldtype": "Section Break",
|
"fieldtype": "Section Break",
|
||||||
"label": "Interview Details"
|
"label": "Interview Details"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname": "text_editor_12",
|
|
||||||
"fieldtype": "Text Editor",
|
|
||||||
"label": "Interview Summary"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "column_break_10",
|
"fieldname": "column_break_10",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
@ -213,12 +208,17 @@
|
|||||||
"options": "Exit Interview",
|
"options": "Exit Interview",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "interview_summary",
|
||||||
|
"fieldtype": "Text Editor",
|
||||||
|
"label": "Interview Summary"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-12-05 18:56:34.856854",
|
"modified": "2021-12-07 14:08:29.355390",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Exit Interview",
|
"name": "Exit Interview",
|
||||||
|
|||||||
@ -109,7 +109,7 @@ def validate_questionnaire_settings():
|
|||||||
|
|
||||||
if not settings.exit_questionnaire_web_form or not settings.exit_questionnaire_notification_template:
|
if not settings.exit_questionnaire_web_form or not settings.exit_questionnaire_notification_template:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
message=_('Please set {0} and {1} in {2}.').format(
|
_('Please set {0} and {1} in {2}.').format(
|
||||||
frappe.bold('Exit Questionnaire Web Form'),
|
frappe.bold('Exit Questionnaire Web Form'),
|
||||||
frappe.bold('Notification Template'),
|
frappe.bold('Notification Template'),
|
||||||
get_link_to_form('HR Settings', 'HR Settings')),
|
get_link_to_form('HR Settings', 'HR Settings')),
|
||||||
@ -122,8 +122,10 @@ def show_email_summary(email_success, email_failure):
|
|||||||
if email_success:
|
if email_success:
|
||||||
message += _('{0}: {1}').format(
|
message += _('{0}: {1}').format(
|
||||||
frappe.bold('Sent Successfully'), ', '.join(email_success))
|
frappe.bold('Sent Successfully'), ', '.join(email_success))
|
||||||
|
if message and email_failure:
|
||||||
|
message += '<br><br>'
|
||||||
if email_failure:
|
if email_failure:
|
||||||
message += '<br><br>' + _('{0} due to missing email information for employee(s): {1}').format(
|
message += _('{0} due to missing email information for employee(s): {1}').format(
|
||||||
frappe.bold('Sending Failed'), ', '.join(email_failure))
|
frappe.bold('Sending Failed'), ', '.join(email_failure))
|
||||||
|
|
||||||
frappe.msgprint(message, title=_('Exit Questionnaire'), indicator='blue', is_minimizable=True, wide=True)
|
frappe.msgprint(message, title=_('Exit Questionnaire'), indicator='blue', is_minimizable=True, wide=True)
|
||||||
@ -1,9 +1,89 @@
|
|||||||
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
|
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
# See license.txt
|
# See license.txt
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
from frappe.core.doctype.user_permission.test_user_permission import create_user
|
||||||
|
from frappe.tests.test_webform import create_custom_doctype, create_webform
|
||||||
|
from frappe.utils import getdate
|
||||||
|
|
||||||
|
from erpnext.hr.doctype.employee.test_employee import make_employee
|
||||||
|
from erpnext.hr.doctype.exit_interview.exit_interview import send_exit_questionnaire
|
||||||
|
|
||||||
|
|
||||||
class TestExitInterview(unittest.TestCase):
|
class TestExitInterview(unittest.TestCase):
|
||||||
pass
|
def test_duplicate_interview(self):
|
||||||
|
employee = make_employee('employeeexit1@example.com')
|
||||||
|
frappe.db.set_value('Employee', employee, 'relieving_date', getdate())
|
||||||
|
interview = create_exit_interview(employee)
|
||||||
|
|
||||||
|
doc = frappe.copy_doc(interview)
|
||||||
|
self.assertRaises(frappe.DuplicateEntryError, doc.save)
|
||||||
|
|
||||||
|
def test_relieving_date_validation(self):
|
||||||
|
employee = make_employee('employeeexit2@example.com')
|
||||||
|
|
||||||
|
interview = create_exit_interview(employee, save=False)
|
||||||
|
self.assertRaises(frappe.ValidationError, interview.save)
|
||||||
|
|
||||||
|
# set relieving date
|
||||||
|
frappe.db.set_value('Employee', employee, 'relieving_date', getdate())
|
||||||
|
interview = create_exit_interview(employee)
|
||||||
|
self.assertTrue(interview.name)
|
||||||
|
|
||||||
|
def test_interview_date_updated_in_employee_master(self):
|
||||||
|
employee = make_employee('employeeexit3@example.com')
|
||||||
|
frappe.db.set_value('Employee', employee, 'relieving_date', getdate())
|
||||||
|
|
||||||
|
interview = create_exit_interview(employee)
|
||||||
|
interview.status = 'Completed'
|
||||||
|
interview.employee_status = 'Exit Confirmed'
|
||||||
|
|
||||||
|
# exit interview date updated on submit
|
||||||
|
interview.submit()
|
||||||
|
self.assertEqual(frappe.db.get_value('Employee', employee, 'held_on'), interview.date)
|
||||||
|
|
||||||
|
# exit interview reset on cancel
|
||||||
|
interview.reload()
|
||||||
|
interview.cancel()
|
||||||
|
self.assertEqual(frappe.db.get_value('Employee', employee, 'held_on'), None)
|
||||||
|
|
||||||
|
def test_send_exit_questionnaire(self):
|
||||||
|
create_custom_doctype()
|
||||||
|
create_webform()
|
||||||
|
|
||||||
|
webform = frappe.db.get_all('Web Form', limit=1)
|
||||||
|
frappe.db.set_value('HR Settings', 'HR Settings', 'exit_questionnaire_web_form', webform[0].name)
|
||||||
|
|
||||||
|
employee = make_employee('employeeexit3@example.com')
|
||||||
|
frappe.db.set_value('Employee', employee, 'relieving_date', getdate())
|
||||||
|
|
||||||
|
interview = create_exit_interview(employee)
|
||||||
|
send_exit_questionnaire([interview])
|
||||||
|
|
||||||
|
email_queue = frappe.db.get_all('Email Queue', ['name', 'message'], limit=1)
|
||||||
|
self.assertTrue('Subject: Exit Questionnaire Notification' in email_queue[0].message)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
frappe.db.rollback()
|
||||||
|
|
||||||
|
|
||||||
|
def create_exit_interview(employee, save=True):
|
||||||
|
interviewer = create_user('test_interviewer1@example.com')
|
||||||
|
|
||||||
|
doc = frappe.get_doc({
|
||||||
|
'doctype': 'Exit Interview',
|
||||||
|
'employee': employee,
|
||||||
|
'company': '_Test Company',
|
||||||
|
'status': 'Pending',
|
||||||
|
'date': getdate(),
|
||||||
|
'interviewers': [{
|
||||||
|
'interviewer': interviewer.name
|
||||||
|
}],
|
||||||
|
'interview_summary': 'Test'
|
||||||
|
})
|
||||||
|
|
||||||
|
if save:
|
||||||
|
return doc.insert()
|
||||||
|
return doc
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user