예제 #1
0
def publish_survey(survey_id, survey_name):
    '''
    Activate and publish the specified survey so it's available to take online
    '''
    try:
        assert survey_id.strip()
        assert survey_name.strip()
    except (AssertionError, AttributeError):
        raise AssertionError(
            'You must provide string values for survey_id and survey_name')

    base_url, auth_token = get_details_for_client()
    api = QualtricsAPIClient(base_url, auth_token)

    survey_description = '{}_{}'.format(
        survey_name,
        datetime.now().strftime("%Y-%m-%d_%H.%M.%S%p"))

    try:
        api.update_survey(survey_id, True)

        version_id, version_number, creation_date = api.publish_survey(
            survey_id, survey_description)
    except (AssertionError, HTTPError) as ex:
        raise QualtricsAPIException(ex)

    survey_url = QUALTRICS_API_PUBLISHED_SURVEY_URL_PATTERN.format(survey_id)

    return survey_url, version_id, version_number, creation_date
class UpdateQuestionTestCase(unittest.TestCase):
    def setUp(self):
        self.client = QualtricsAPIClient('http://qualtrics.com/api',
                                         'token-456')

    def test_update_survey_asserts_survey_id_parameter(self):
        with self.assertRaises(AssertionError):
            self.client.update_survey(None, True)

        with self.assertRaises(AssertionError):
            self.client.update_survey('', True)

        with self.assertRaises(AssertionError):
            self.client.update_survey(1, True)

    def test_update_survey_asserts_is_active_parameter(self):
        with self.assertRaises(AssertionError):
            self.client.update_survey('SV_1234567890a', None)

        with self.assertRaises(AssertionError):
            self.client.update_survey('SV_1234567890a', [1, 2, 3])

        with self.assertRaises(AssertionError):
            self.client.update_survey('SV_1234567890a', 123.45)

        with self.assertRaises(AssertionError):
            self.client.update_survey('SV_1234567890a', {})

    def test_update_survey_validates_survey_id(self):
        with self.assertRaises(AssertionError):
            self.client.update_survey('invalid_survey_id', False)

    @responses.activate
    def test_makes_request_as_expected(self):
        update_survey_json = {
            'meta': {
                'requestId': '82997a4-9493-41e1-be49-6f02e5afbb42',
                'httpStatus': '200 - OK'
            }
        }

        responses.add(responses.PUT,
                      'http://qualtrics.com/api/surveys/SV_1234567890a',
                      json=update_survey_json)

        try:
            self.client.update_survey('SV_1234567890a', True)

        except AssertionError as ae:
            self.fail("update_survey() raised AssertionError unexpectedly: {}".
                      format(ae))

        except Exception as ex:  # pylint: disable=broad-except
            self.fail(
                "update_survey() raised Exception unexpectedly: {}".format(ex))

    @responses.activate
    def test_raises_http_error_for_failed_requests(self):
        responses.add(responses.PUT,
                      'http://qualtrics.com/api/surveys/SV_1234567890a',
                      json={},
                      status=404)
        with self.assertRaises(requests.HTTPError):
            self.client.update_survey('SV_1234567890a', False)

        responses.replace(responses.PUT,
                          'http://qualtrics.com/api/surveys/SV_1234567890a',
                          json={},
                          status=500)
        with self.assertRaises(requests.HTTPError):
            self.client.update_survey('SV_1234567890a', False)