def post(self): args = self.post_req_parser.parse_args() response_id = args['response_id'] title = args['title'] firstname = args['firstname'] lastname = args['lastname'] relation = args['relation'] email = args['email'] user = user_repository.get_by_id(g.current_user['id']) if not user: return USER_NOT_FOUND event = event_repository.get_event_by_response_id(response_id) if not event: return EVENT_NOT_FOUND response = response_repository.get_by_id(response_id) if not response: return RESPONSE_NOT_FOUND reference_request = ReferenceRequest(response_id=response_id, title=title, firstname=firstname, lastname=lastname, relation=relation, email=email) reference_request_repository.create(reference_request) link = "{host}/reference/{token}".format(host=misc.get_baobab_host(), token=reference_request.token) candidate, candidate_firstname, nominator = _get_candidate_nominator( response) if nominator is None: nomination_text = "has nominated themself" else: nomination_text = "has been nominated by {}".format(nominator) subject = 'REFERENCE REQUEST - {}'.format(event.name) body = REFERENCE_REQUEST_EMAIL_BODY.format( title=title, firstname=firstname, lastname=lastname, candidate=candidate, candidate_firstname=candidate_firstname, nomination_text=nomination_text, event_name=event.name, event_url=event.url, application_close_date=event.application_close, link=link) send_mail(recipient=email, subject=subject, body_text=body) reference_request.set_email_sent(datetime.now()) reference_request_repository.add(reference_request) return reference_request, 201
def post(self): args = self.post_req_parser.parse_args() response_id = args['response_id'] title = args['title'] firstname = args['firstname'] lastname = args['lastname'] relation = args['relation'] email = args['email'] user = user_repository.get_by_id(g.current_user['id']) if not user: return USER_NOT_FOUND event = event_repository.get_event_by_response_id(response_id) if not event: return EVENT_NOT_FOUND response = response_repository.get_by_id(response_id) if not response: return RESPONSE_NOT_FOUND reference_request = ReferenceRequest(response_id=response_id, title=title, firstname=firstname, lastname=lastname, relation=relation, email=email) reference_request_repository.create(reference_request) link = "{host}/reference/{token}".format(host=misc.get_baobab_host(), token=reference_request.token) try: candidate, candidate_firstname, nominator = _get_candidate_nominator( response) except ValueError as e: LOGGER.error(e) return BAD_CONFIGURATION email_user('reference-request-self-nomination' if nominator is None else 'reference-request', template_parameters=dict( candidate=candidate, candidate_firstname=candidate_firstname, nominator=nominator, event_url=event.url, application_close_date=event.application_close, link=link), event=event, user=user) reference_request.set_email_sent(datetime.now()) reference_request_repository.add(reference_request) return reference_request, 201
def test_get_reference_request_by_id(self): self._seed_data() reference_req = ReferenceRequest(1, 'Mr', 'John', 'Snow', 'Supervisor', '*****@*****.**') reference_request_repository.create(reference_req) response = self.app.get('/api/v1/reference-request', data={'id': 1}, headers=self.headers) data = json.loads(response.data) assert response.status_code == 200 assert data['firstname'] == 'John'
def test_get_reference_request_by_response_id(self): self._seed_data() reference_req = ReferenceRequest(1, 'Mr', 'John', 'Snow', 'Supervisor', '*****@*****.**') reference_req2 = ReferenceRequest(1, 'Mrs', 'John', 'Jones', 'Manager', '*****@*****.**') reference_request_repository.create(reference_req) reference_request_repository.create(reference_req2) response = self.app.get('/api/v1/reference-request/list', data={'response_id': 1}, headers=self.first_headers) data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(len(data), 2)
def post(self): LOGGER.debug('Received post request for reference-request') args = self.post_req_parser.parse_args() response_id = args['response_id'] title = args['title'] firstname = args['firstname'] lastname = args['lastname'] relation = args['relation'] email = args['email'] user = user_repository.get_by_id(g.current_user['id']) if not user: return USER_NOT_FOUND response_event = event_repository.get_event_by_response_id(response_id) if not response_event or not response_event.Event: return EVENT_NOT_FOUND event = response_event.Event reference_request = ReferenceRequest(response_id=response_id, title=title, firstname=firstname, lastname=lastname, relation=relation, email=email) reference_request_repository.create(reference_request) link = "{host}/{key}/reference?token={token}".format( host=misc.get_baobab_host(), key=event.key, token=reference_request.token) subject = 'REFERENCE REQUEST - {}'.format(event.name) body = REFERENCE_REQUEST_EMAIL_BODY.format( title=title, firstname=firstname, lastname=lastname, event_description=event.description, link=link, candidate_firstname=user.firstname, candidate_lastname=user.lastname, application_close_date=event.application_close) send_mail(recipient=email, subject=subject, body_text=body) reference_request.set_email_sent(datetime.now()) reference_request_repository.update(reference_request) return {}, 201
def test_get_reference_request_by_id(self): self._seed_data() reference_req = ReferenceRequest(1, 'Mr', 'John', 'Snow', 'Supervisor', '*****@*****.**') reference_request_repository.create(reference_req) response = self.app.get('/api/v1/reference-request', data={'id': 1}, headers=self.first_headers) data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(data['title'], 'Mr') self.assertEqual(data['firstname'], 'John') self.assertEqual(data['lastname'], 'Snow') self.assertEqual(data['relation'], 'Supervisor') self.assertEqual(data['email'], '*****@*****.**') self.assertIsNone(data['email_sent']) self.assertFalse(data['reference_submitted'])
def test_get_reference_request_detail_by_token_other_nomination(self): self._seed_data() reference_req = ReferenceRequest(2, 'Mr', 'John', 'Snow', 'Supervisor', '*****@*****.**') reference_request_repository.create(reference_req) response = self.app.get('/api/v1/reference-request/detail', data={'token': reference_req.token}, headers=self.other_headers) data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(data['candidate'], 'Mx Skittles Cat') self.assertEqual(data['nominator'], 'Mrs User Lastname') self.assertEqual(data['relation'], reference_req.relation) self.assertEqual(data['name'], self.test_event_data['name']) self.assertEqual(data['description'], self.test_event_data['description']) self.assertEqual(data['is_application_open'], True) self.assertEqual(data['email_from'], self.test_event_data['email_from']) self.assertIsNone(data['reference_submitted_timestamp'])
def test_reference_api(self): self._seed_data() reference_req = ReferenceRequest(1, 'Mr', 'John', 'Snow', 'Supervisor', '*****@*****.**') reference_request_repository.create(reference_req) REFERENCE_DETAIL = { 'token': reference_req.token, 'uploaded_document': 'DOCT-UPLOAD-78999', } response = self.app.post('/api/v1/reference', data=REFERENCE_DETAIL, headers=self.first_headers) self.assertEqual(response.status_code, 201) response = self.app.get('/api/v1/reference', data={'response_id': 1}, headers=self.first_headers) LOGGER.debug(response.data) data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(len(data), 1) reference_request = reference_request_repository.get_by_id(1) self.assertEqual(reference_request.has_reference, True)
def test_reference_application_closed(self): self.add_organisation('Deep Learning Indaba', 'blah.png', 'blah_big.png') other_user_data = self.add_user('*****@*****.**') test_event = self.add_event() test_event.add_event_role('admin', 1) test_event.set_application_close(datetime.now()) self.add_to_db(test_event) self.test_form = self.create_application_form(test_event.id, True, False) self.add_to_db(self.test_form) self.test_response = Response(self.test_form.id, other_user_data.id) self.add_to_db(self.test_response) self.headers = self.get_auth_header_for("*****@*****.**") db.session.flush() reference_req = ReferenceRequest(1, 'Mr', 'John', 'Snow', 'Supervisor', '*****@*****.**') reference_request_repository.create(reference_req) REFERENCE_DETAIL = { 'token': reference_req.token, 'uploaded_document': 'DOCT-UPLOAD-78999', } response = self.app.post('/api/v1/reference', data=REFERENCE_DETAIL, headers=self.headers) self.assertEqual(response.status_code, 403) response = self.app.put('/api/v1/reference', data=REFERENCE_DETAIL, headers=self.headers) self.assertEqual(response.status_code, 403)