def test_notification_on_rescheduling(self): job_applicant = create_job_applicant() interview = create_interview_and_dependencies(job_applicant.name, scheduled_on=add_days( getdate(), -4)) previous_scheduled_date = interview.scheduled_on frappe.db.sql("DELETE FROM `tabEmail Queue`") interview.reschedule_interview(add_days( getdate(previous_scheduled_date), 2), from_time=nowtime(), to_time=nowtime()) interview.reload() self.assertEqual(interview.scheduled_on, add_days(getdate(previous_scheduled_date), 2)) notification = frappe.get_all( "Email Queue", filters={ "message": ("like", "%Your Interview session is rescheduled from%") }) self.assertIsNotNone(notification)
def test_job_applicant_update(self): create_staffing_plan() job_applicant = create_job_applicant( email_id="*****@*****.**") job_offer = create_job_offer(job_applicant=job_applicant.name) job_offer.submit() job_applicant.reload() self.assertEquals(job_applicant.status, "Accepted") # status update after rejection job_offer.status = "Rejected" job_offer.submit() job_applicant.reload() self.assertEquals(job_applicant.status, "Rejected")
def test_notification_for_feedback_submission(self): from erpnext.hr.doctype.interview.interview import send_daily_feedback_reminder setup_reminder_settings() job_applicant = create_job_applicant() scheduled_on = add_days(getdate(), -4) create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on) frappe.db.sql("DELETE FROM `tabEmail Queue`") send_daily_feedback_reminder() email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertTrue("Subject: Interview Feedback Reminder" in email_queue[0].message)
def test_average_ratings_on_feedback_submission_and_cancellation(self): job_applicant = create_job_applicant() interview = create_interview_and_dependencies(job_applicant.name, scheduled_on=add_days( getdate(), -1)) skill_ratings = get_skills_rating(interview.interview_round) # For First Interviewer Feedback interviewer = interview.interview_details[0].interviewer frappe.set_user(interviewer) # calculating Average feedback_1 = create_interview_feedback(interview.name, interviewer, skill_ratings) total_rating = 0 for d in feedback_1.skill_assessment: if d.rating: total_rating += d.rating avg_rating = flt(total_rating / len(feedback_1.skill_assessment) if len(feedback_1.skill_assessment) else 0) self.assertEqual(flt(avg_rating, 2), flt(feedback_1.average_rating, 2)) avg_on_interview_detail = frappe.db.get_value( "Interview Detail", { "parent": feedback_1.interview, "interviewer": feedback_1.interviewer, "interview_feedback": feedback_1.name, }, "average_rating", ) # 1. average should be reflected in Interview Detail. self.assertEqual(flt(avg_on_interview_detail, 2), flt(feedback_1.average_rating, 2)) """For Second Interviewer Feedback""" interviewer = interview.interview_details[1].interviewer frappe.set_user(interviewer) feedback_2 = create_interview_feedback(interview.name, interviewer, skill_ratings) interview.reload() feedback_2.cancel() interview.reload() frappe.set_user("Administrator")
def test_job_applicant_update(self): frappe.db.set_value("HR Settings", None, "check_vacancies", 0) create_staffing_plan() job_applicant = create_job_applicant( email_id="*****@*****.**") job_offer = create_job_offer(job_applicant=job_applicant.name) job_offer.submit() job_applicant.reload() self.assertEqual(job_applicant.status, "Accepted") # status update after rejection job_offer.status = "Rejected" job_offer.submit() job_applicant.reload() self.assertEquals(job_applicant.status, "Rejected") frappe.db.set_value("HR Settings", None, "check_vacancies", 1)
def test_notification_for_scheduling(self): from erpnext.hr.doctype.interview.interview import send_interview_reminder setup_reminder_settings() job_applicant = create_job_applicant() scheduled_on = datetime.datetime.now() + datetime.timedelta(minutes=10) interview = create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on) frappe.db.sql("DELETE FROM `tabEmail Queue`") send_interview_reminder() interview.reload() email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) self.assertTrue("Subject: Interview Reminder" in email_queue[0].message)
def test_get_interview_details_for_applicant_dashboard(self): job_applicant = create_job_applicant() interview = create_interview_and_dependencies(job_applicant.name) details = get_interview_details(job_applicant.name) self.assertEqual(details.get("stars"), 5) self.assertEqual( details.get("interviews").get(interview.name), { "name": interview.name, "interview_round": interview.interview_round, "expected_average_rating": interview.expected_average_rating * 5, "average_rating": interview.average_rating * 5, "status": "Pending", }, )
def test_job_offer_creation_against_vacancies(self): create_staffing_plan( staffing_details=[{ "designation": "Designer", "vacancies": 0, "estimated_cost_per_position": 5000 }]) frappe.db.set_value("HR Settings", None, "check_vacancies", 1) job_applicant = create_job_applicant( email_id="*****@*****.**") job_offer = create_job_offer(job_applicant=job_applicant.name, designation="Researcher") self.assertRaises(frappe.ValidationError, job_offer.submit) # test creation of job offer when vacancies are not present frappe.db.set_value("HR Settings", None, "check_vacancies", 0) job_offer.submit() self.assertTrue(frappe.db.exists("Job Offer", job_offer.name))
def create_job_offer(**args): args = frappe._dict(args) if not args.job_applicant: job_applicant = create_job_applicant() if not frappe.db.exists("Designation", args.designation): designation = create_designation(designation_name=args.designation) job_offer = frappe.get_doc({ "doctype": "Job Offer", "job_applicant": args.job_applicant or job_applicant.name, "offer_date": args.offer_date or nowdate(), "designation": args.designation or "Researcher", "status": args.status or "Accepted" }) return job_offer
def test_validation_for_skill_set(self): frappe.set_user("Administrator") job_applicant = create_job_applicant() interview = create_interview_and_dependencies(job_applicant.name, scheduled_on=add_days( getdate(), -1)) skill_ratings = get_skills_rating(interview.interview_round) interviewer = interview.interview_details[0].interviewer create_skill_set(["Leadership"]) interview_feedback = create_interview_feedback(interview.name, interviewer, skill_ratings) interview_feedback.append("skill_assessment", { "skill": "Leadership", "rating": 0.8 }) frappe.set_user(interviewer) self.assertRaises(frappe.ValidationError, interview_feedback.save) frappe.set_user("Administrator")
def test_validations_for_designation(self): job_applicant = create_job_applicant() interview = create_interview_and_dependencies( job_applicant.name, designation='_Test_Sales_manager', save=0) self.assertRaises(DuplicateInterviewRoundError, interview.save)