def test_get_applicant_notes_forbidden(self): add_applicant_note(self.applicant.id, "A note", current_user=self.recruiter) for user in (self.other_recruiter, self.not_applicant): with self.assertRaises(ForbiddenException): get_applicant_notes(self.applicant.id, current_user=user)
def test_accepted_history_with_note(self): add_applicant_note(self.applicant.id, "A note", title='A Title', is_chat_log=True, current_user=self.recruiter) accept_applicant(self.applicant.id, current_user=self.recruiter) result = application_history(self.applicant.id, current_user=self.admin) self.assertIsInstance(result, dict) self.assertIn('info', result) self.assertIsInstance(result['info'], dict) self.assertEqual(len(result['info']), 1) the_key = list(result['info'].keys())[0] app_data = result['info'][the_key] self.assertEqual(app_data['recruiter_id'], self.recruiter.id) self.assertEqual(app_data['recruiter_name'], self.recruiter.name) self.assertEqual(app_data['status'], 'accepted') self.assertEqual(len(app_data['notes']), 2) note_data = app_data['notes'][0] self.assertEqual(note_data['text'], 'A note') self.assertEqual(note_data['title'], 'A Title') self.assertEqual(note_data['author'], self.recruiter.name) self.assertTrue(note_data['is_chat_log']) for key in ('timestamp', 'author', 'title', 'text', 'id', 'is_chat_log'): self.assertIn(key, note_data)
def test_cannot_modify_others_note(self): add_applicant_note(self.applicant.id, 'A note', current_user=self.senior_recruiter) note_data = get_applicant_notes( self.applicant.id, current_user=self.senior_recruiter)['info'][0] with self.assertRaises(ForbiddenException): edit_applicant_note(note_data['id'], 'Edited note', current_user=self.recruiter)
def test_get_another_recruiters_note(self): add_applicant_note(self.applicant.id, "A note", current_user=self.senior_recruiter) notes = get_applicant_notes(self.applicant.id, current_user=self.senior_recruiter)['info'] self.assertEqual(notes[0]['can_edit'], True) other_view_of_notes = get_applicant_notes( self.applicant.id, current_user=self.recruiter)['info'] self.assertEqual(other_view_of_notes[0]['can_edit'], False)
def test_edit_note_forbidden(self): add_applicant_note(self.applicant.id, 'A note', title='Title', current_user=self.recruiter) note_data = get_applicant_notes(self.applicant.id, current_user=self.recruiter)['info'][0] for user in (self.applicant, self.not_applicant, self.other_recruiter): with self.assertRaises(ForbiddenException): edit_applicant_note(note_data['id'], 'Edited note', title='New Title', current_user=user)
def test_senior_recruiter_modify_own_note(self): add_applicant_note(self.applicant.id, 'A note', current_user=self.senior_recruiter) note_data = get_applicant_notes( self.applicant.id, current_user=self.senior_recruiter)['info'][0] edit_applicant_note(note_data['id'], 'Edited note', current_user=self.senior_recruiter) new_note_data = get_applicant_notes( self.applicant.id, current_user=self.senior_recruiter)['info'][0] self.assertEqual(note_data['id'], new_note_data['id']) self.assertEqual(new_note_data['text'], 'Edited note')
def test_get_applicant_notes_without_title(self): add_applicant_note(self.applicant.id, "A note", current_user=self.recruiter) response = get_applicant_notes(self.applicant.id, current_user=self.recruiter) self.assertIsInstance(response, dict) self.assertIn('info', response) self.assertEqual(len(response['info']), 1) data = response['info'][0] for key in ('timestamp', 'author', 'title', 'text', 'id', 'is_chat_log'): self.assertIn(key, data) self.assertEqual(data['title'], None) self.assertEqual(data['text'], 'A note') self.assertEqual(data['is_chat_log'], False)
def test_modify_own_note_title(self): add_applicant_note(self.applicant.id, 'A note', title='Title', current_user=self.senior_recruiter) note_data = get_applicant_notes( self.applicant.id, current_user=self.senior_recruiter)['info'][0] response = edit_applicant_note(note_data['id'], 'Edited note', title='New Title', current_user=self.senior_recruiter) self.assertEqual(response, {'status': 'ok'}) new_note_data = get_applicant_notes( self.applicant.id, current_user=self.senior_recruiter)['info'][0] self.assertEqual(note_data['id'], new_note_data['id']) self.assertEqual(new_note_data['title'], 'New Title') self.assertEqual(new_note_data['text'], 'Edited note')
def test_add_applicant_note_as_senior_recruiter(self): response = add_applicant_note(self.applicant.id, "A note", current_user=self.recruiter) self.assertDictEqual(response, {'status': 'ok'}) notes = self.application.notes self.assertEqual(len(notes), 1) self.assertEqual(notes[0].text, "A note") augmented_notes = get_applicant_notes( self.applicant.id, current_user=self.recruiter)['info'] self.assertEqual(augmented_notes[0]['can_edit'], True) response = add_applicant_note(self.applicant.id, "Another note", current_user=self.senior_recruiter) self.assertDictEqual(response, {'status': 'ok'}) notes = self.application.notes self.assertEqual(len(notes), 2)
def test_add_chat_log_with_title(self): response = add_applicant_note(self.applicant.id, "A note", title="A Title", is_chat_log=True, current_user=self.recruiter) self.assertDictEqual(response, {'status': 'ok'}) notes = self.application.notes self.assertEqual(len(notes), 1) self.assertEqual(notes[0].text, "A note") self.assertEqual(notes[0].title, "A Title") augmented_notes = get_applicant_notes( self.applicant.id, current_user=self.recruiter)['info'] self.assertEqual(augmented_notes[0]['can_edit'], True) response = add_applicant_note(self.applicant.id, "Another note", current_user=self.recruiter) self.assertDictEqual(response, {'status': 'ok'}) notes = self.application.notes self.assertEqual(len(notes), 2)
def test_add_applicant_note_on_accepted(self): accept_applicant(self.applicant.id, current_user=self.recruiter) notes = self.application.notes self.assertEqual(len(notes), 1) response = add_applicant_note(self.applicant.id, "A note", current_user=self.senior_recruiter) self.assertDictEqual(response, {'status': 'ok'}) notes = self.application.notes self.assertEqual(len(notes), 2) self.assertEqual(notes[1].text, "A note") self.assertEqual(notes[1].title, None)
def api_add_applicant_note(applicant_id): """ Add a note for an applicant Args: applicant_id (int): User key of applicant text (in body): The note Returns: {'status': 'ok'} if note is successfully added Error codes: Forbidden (403): If logged in user is not a senior recruiter or a recruiter who has claimed this applicant Bad request (400): If the given user is not an applicant """ return jsonify( add_applicant_note(applicant_id, text=request.get_json().get('text'), current_user=current_user))
def api_add_applicant_chat(applicant_id): """ Add a partial chat log for an applicant Args: applicant_id (int): User key of applicant text (in body): The chat log title (in body): The chat log description Returns: {'status': 'ok'} if log is successfully added Error codes: Forbidden (403): If logged in user is not a senior recruiter or a recruiter who has claimed this applicant Bad request (400): If the given user is not an applicant """ return jsonify( add_applicant_note(applicant_id, text=request.get_json()['text'], title=request.get_json()['title'], is_chat_log=True, current_user=current_user))
def test_add_not_an_applicant_note_as_senior_recruiter(self): with self.assertRaises(BadRequestException): add_applicant_note(self.not_applicant.id, "A note", current_user=self.senior_recruiter)
def test_add_applicant_note_non_recruiter(self): with self.assertRaises(ForbiddenException): add_applicant_note(self.applicant.id, "A note", current_user=self.not_applicant)
def test_add_applicant_note_as_admin(self): with self.assertRaises(ForbiddenException): add_applicant_note(self.applicant.id, "A note", current_user=self.admin)