示例#1
0
文件: api.py 项目: mxaba/Baobab
    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
示例#2
0
    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
示例#3
0
 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'
示例#4
0
文件: tests.py 项目: mxaba/Baobab
 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)
示例#5
0
    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
示例#6
0
文件: tests.py 项目: mxaba/Baobab
 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'])
示例#7
0
文件: tests.py 项目: mxaba/Baobab
 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'])
示例#8
0
文件: tests.py 项目: mxaba/Baobab
    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)
示例#9
0
文件: tests.py 项目: mxaba/Baobab
    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)