def test_dps_action_error(self, mock_account, mock_case, *_): error = ('verification_api', 'VERIFICATION_ERROR') mock_account.side_effect = ApplicationError( *errors.get(*error, filler='TEST ERROR')) mock_case.get_case_by_id.return_value = _generate_test_profile() with self.assertRaises(ApplicationError) as context: service.dps_action('Approve', '1', {'staff_id': 'LRTM101'}) expected_err = errors.get_message(*error, filler='TEST ERROR') self.assertEqual(context.exception.message, expected_err) self.assertEqual(context.exception.code, errors.get_code(*error))
def test_dps_action_no_row(self, mock_case, *_): mock_case.get_case_by_id.return_value = None with self.assertRaises(ApplicationError) as context: service.dps_action('Approve', '1', {'staff_id': 'LRTM101'}) expected_err = ('verification_api', 'CASE_NOT_FOUND') expected_err_message = errors.get_message(*expected_err, filler='1') expected_err_code = errors.get_code(*expected_err) self.assertEqual(context.exception.message, expected_err_message) self.assertEqual(context.exception.code, expected_err_code)
def test_dps_action_sql_error(self, mock_case, *_): with self.assertRaises(ApplicationError) as context: mock_case.get_case_by_id.side_effect = self.error service.dps_action('Approve', '1', {'staff_id': 'LRTM101'}) self.assertEqual( context.exception.message, errors.get_message("verification_api", "SQLALCHEMY_ERROR", filler=self.error)) self.assertEqual( errors.get_code("verification_api", "SQLALCHEMY_ERROR"), context.exception.code)
def test_dps_action_invalid_action(self, mock_lock, mock_case, *_): mock_lock.return_value = True mock_case.return_value = _generate_test_profile() data = {'staff_id': 'LRTM101', 'reason': 'Company Failed'} with self.assertRaises(ApplicationError) as context: service.dps_action('Obliviate', '1', data) expected_err = ('verification_api', 'VERIFICATION_ERROR') expected_err_message = errors.get_message( *expected_err, filler='Invalid action Obliviate') expected_err_code = errors.get_code(*expected_err) self.assertEqual(context.exception.message, expected_err_message) self.assertEqual(context.exception.code, expected_err_code)
def test_dps_action_approve_locked(self, mock_lock, mock_case, *_): mock_lock.return_value = False mock_case.return_value = _generate_test_profile() data = {'staff_id': 'LRTM101'} with self.assertRaises(ApplicationError) as context: service.dps_action('Approve', '1', data) expected_err = ('verification_api', 'LOCKING_ERROR') expected_err_message = 'Could not perform action on case as it is locked to another user' expected_err_message = errors.get_message(*expected_err, filler=expected_err_message) expected_err_code = errors.get_code(*expected_err) self.assertEqual(context.exception.message, expected_err_message) self.assertEqual(context.exception.code, expected_err_code)
def test_dps_action_approve(self, mock_lock, mock_case, *_): mock_lock.return_value = True mock_case.return_value = _generate_test_profile() data = {'staff_id': 'LRTM101'} result = service.dps_action('Approve', '1', data) expected_result = { 'case_id': '1', 'staff_id': 'LRTM101', 'status_updated': True } self.assertEqual(result, expected_result)
def test_dps_action_decline(self, mock_lock, mock_case, *_): mock_lock.return_value = True mock_case.return_value = _generate_test_profile() data = { 'staff_id': 'LRTM101', 'reason': 'Company Failed', 'advice': 'Reapply' } result = service.dps_action('Decline', '1', data) expected_result = { 'case_id': '1', 'staff_id': 'LRTM101', 'reason': 'Company Failed', 'advice': 'Reapply', 'status_updated': True } self.assertDictEqual(result, expected_result)
def decline_case(case_id): try: decline = request.get_json(force=True) app.logger.info("Declining case {}, by: {}".format( case_id, decline['staff_id'])) result = service.dps_action('Decline', case_id, decline) if not result['status_updated']: app.logger.error('Failed to approve case {}'.format(case_id)) return jsonify(result), 500 user_details = service.get_pending_by_id(case_id) user_details['decline_reason'] = decline['reason'] return jsonify(result), 200 except ApplicationError as error: error_msg = 'Failed to decline case - {}'.format(error.message) app.logger.error(error_msg) return jsonify(error=error_msg), error.http_code
def approve_case(case_id): try: approval = request.get_json(force=True) app.logger.info('Approving case {}, by: {}'.format( case_id, approval['staff_id'])) result = service.dps_action('Approve', case_id, approval) if not result['status_updated']: app.logger.error('Failed to approve case {}'.format(case_id)) return jsonify(result), 500 user_details = service.get_pending_by_id(case_id) insert_metric_event('dst action approved', user_details) return jsonify(result), 200 except ApplicationError as error: error_msg = 'Failed to approve case - {}'.format(error.message) app.logger.error(error_msg) return jsonify(error=error_msg), error.http_code