Exemple #1
0
class FormsTestCase(TestCase):
    def setUp(self):
        self.forms = Typeform(TOKEN).forms
        form = self.forms.create({
            'title': 'title'
        })
        self.formID = form.get('id')

    def tearDown(self):
        list = self.forms.list()
        forms = list.get('items', [])
        for form in forms:
            self.forms.delete(form.get('id'))

    def test_forms_returns_method_and_path(self):
        """
        get all forms has the correct method and path
        """
        with requests_mock.mock() as m:
            m.get(API_BASE_URL+'/forms', json={})
            self.forms.list()

            history = m.request_history
            self.assertEqual(history[0].url, API_BASE_URL+'/forms')
            self.assertEqual(history[0].method, 'GET')

    def test_forms_correct_params(self):
        """
        paramters are sent correctly
        """
        with requests_mock.mock() as m:
            m.get(API_BASE_URL+'/forms', json={})
            self.forms.list(page=2, pageSize=10, search='hola', workspaceId='abc')

            history = m.request_history
            query = history[0].url.split('?')[1]
            params = dict(urllib.parse.parse_qs(query))

            self.assertEqual(params.pop('page')[0], '2')
            self.assertEqual(params.pop('page_size')[0], '10')
            self.assertEqual(params.pop('search')[0], 'hola')
            self.assertEqual(params.pop('workspace_id')[0], 'abc')

    def test_forms_get_correct_id(self):
        """
        get sends the correct UID
        """
        with requests_mock.mock() as m:
            m.get(API_BASE_URL+'/forms/'+self.formID, json={})
            self.forms.get(self.formID)

            history = m.request_history
            self.assertEqual(history[0].url, API_BASE_URL+'/forms/'+self.formID)

    def test_forms_get_sets_get_method(self):
        """
        get sets get method
        """
        with requests_mock.mock() as m:
            m.get(API_BASE_URL+'/forms/'+self.formID, json={})
            self.forms.get(self.formID)

            history = m.request_history
            self.assertEqual(history[0].method, 'GET')

    def test_forms_update_updates_a_form(self):
        """
        update updates a form
        """
        title = 'hola'
        result = self.forms.update(self.formID, data={
            'title': title
        })

        self.assertEqual(result.get('title'), title)

    def test_forms_update_as_patch_updates_a_form(self):
        """
        update as patch updates a form
        """
        result = self.forms.update(self.formID, patch=True, data=[{
            'op': 'replace',
            'path': '/title',
            'value': 'aloha'
        }])

        self.assertEqual(result, 'OK')

    def test_forms_update_sets_put_method_in_request_by_default(self):
        """
        update sets put method in request by default
        """
        with requests_mock.mock() as m:
            m.put(API_BASE_URL+'/forms/'+self.formID, json={})
            self.forms.update(self.formID, data={
                'title': 'title'
            })

            history = m.request_history

            self.assertEqual(history[0].method, 'PUT')

    def test_forms_delete_removes_the_correct_uid_form(self):
        """
        delete removes the correct uid form
        """
        get1Result = self.forms.get(self.formID)
        self.assertEqual(get1Result.get('id'), self.formID)
        self.forms.delete(self.formID)
        try:
            self.forms.get(self.formID)
        except Exception as err:
            error = str(err)
        self.assertEqual(error, 'Non existing form with uid %s' % self.formID)

    def test_forms_create_has_the_correct_path_and_method(self):
        """
        create has the correct path and method
        """
        with requests_mock.mock() as m:
            m.post(API_BASE_URL+'/forms', json={})
            self.forms.create({
                'title': 'hola'
            })

            history = m.request_history

            self.assertEqual(history[0].method, 'POST')
            self.assertEqual(history[0].url, API_BASE_URL+'/forms')

    def test_forms_create_creates_a_new_form(self):
        """
        create creates a new form
        """
        createResult = self.forms.create({
            'title': 'hola'
        })

        formID = createResult.get('id')

        getResult = self.forms.get(formID)

        self.assertIsNone(createResult.get('code', None))
        self.assertEqual(getResult.get('id'), formID)

    def test_forms_get_messages_has_the_correct_path_and_method(self):
        """
        get messages has the correct path and method
        """
        with requests_mock.mock() as m:
            m.get(API_BASE_URL+'/forms/'+self.formID+'/messages', json={})
            self.forms.messages.get(self.formID)

            history = m.request_history

            self.assertEqual(history[0].method, 'GET')
            self.assertEqual(history[0].url, API_BASE_URL+'/forms/'+self.formID+'/messages')

    def test_forms_update_messages_has_the_correct_path_and_method(self):
        """
        update messages has the correct path and method
        """
        with requests_mock.mock() as m:
            m.put(API_BASE_URL+'/forms/'+self.formID+'/messages')
            self.forms.messages.update(self.formID)

            history = m.request_history

            self.assertEqual(history[0].method, 'PUT')
            self.assertEqual(history[0].url, API_BASE_URL+'/forms/'+self.formID+'/messages')
class ResponsesTestCase(TestCase):
    def setUp(self):
        self.forms = Typeform(TOKEN).forms
        self.responses = Typeform(TOKEN).responses
        if not MOCK:
            form = self.forms.create((dict(title="Responses's test form",
                                           workspace={'href': WORKSPACE})))
            self.formID = form.get('id')
        else:
            self.formID = 'MOCK-FORM-ID'

    def tearDown(self):
        if not MOCK:
            list = self.forms.list(workspaceId=WORKSPACE_ID)
            forms = list.get('items', [])
            for form in forms:
                self.forms.delete(form.get('id'))

    def test_list_returns_method_and_path(self):
        """
        get all responses has the correct method and path
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            url = API_BASE_URL + '/forms/' + self.formID + '/responses'
            m.get(url, json={})
            self.responses.list(self.formID)

            history = m.request_history
            self.assertEqual(history[0].url, url)
            self.assertEqual(history[0].method, 'GET')

    def test_list_correct_params(self):
        """
        paramters are sent correctly
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            url = API_BASE_URL + '/forms/' + self.formID + '/responses'
            m.get(url, json={})
            self.responses.list(self.formID,
                                pageSize='100',
                                since='2000-01-01T00:00:00Z',
                                completed=True,
                                fields=['1', '2'])

            history = m.request_history
            query = history[0].url.split('?')[1]
            params = dict(urllib.parse.parse_qs(query))

            self.assertEqual(params.pop('page_size')[0], '100')
            self.assertEqual(params.pop('since')[0], '2000-01-01T00:00:00Z')
            self.assertEqual(params.pop('completed')[0], 'true')
            self.assertEqual(params.pop('fields')[0], '1,2')

    def test_list_fetches_responses(self):
        """
        get all responses does not throw an error
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.get(API_BASE_URL + '/forms/{}/responses'.format(self.formID),
                  json=dict(total_items=0))
            result = self.responses.list(self.formID)
            self.assertEqual(result.pop('total_items'), 0)

    def test_list_fetches_responses_with_params(self):
        """
        get all responses does not throw an error with parameters
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.get(API_BASE_URL + '/forms/{}/responses'.format(self.formID),
                  json=dict(total_items=0))
            result = self.responses.list(self.formID,
                                         pageSize=100,
                                         since='2000-01-01T00:00:00Z',
                                         completed=True,
                                         fields=['1', '2'])
            self.assertEqual(result.pop('total_items'), 0)

    def test_delete_one_token_returns_method_and_path(self):
        """
        delete response has the correct method and path when deleting one token
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            url = API_BASE_URL + '/forms/' + self.formID + '/responses?included_tokens=1'
            m.delete(url, json={})
            self.responses.delete(self.formID, includedTokens='1')

            history = m.request_history
            self.assertEqual(history[0].url, url)
            self.assertEqual(history[0].method, 'DELETE')

    def test_delete_multiple_token_returns_method_and_path(self):
        """
        delete response has the correct method and path when deleting multiple tokens
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            url = API_BASE_URL + '/forms/' + self.formID + '/responses?included_tokens=1%2C2%2C3'
            m.delete(url, json={})
            self.responses.delete(self.formID, includedTokens=['1', '2', '3'])

            history = m.request_history
            self.assertEqual(history[0].url, url)
            self.assertEqual(history[0].method, 'DELETE')
Exemple #3
0
class FormsTestCase(TestCase):
    def setUp(self):
        self.forms = Typeform(TOKEN).forms
        if not MOCK:
            form = self.forms.create(
                dict(title="Form's test form", workspace={'href': WORKSPACE}))
            self.formID = form.get('id')
        else:
            self.formID = 'MOCK-FORM-ID'

    def tearDown(self):
        if not MOCK:
            list = self.forms.list(workspaceId=WORKSPACE_ID)
            forms = list.get('items', [])
            for form in forms:
                self.forms.delete(form.get('id'))

    def test_forms_returns_method_and_path(self):
        """
        get all forms has the correct method and path
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.get(API_BASE_URL + '/forms', json={})
            self.forms.list(workspaceId=WORKSPACE_ID)

            history = m.request_history
            self.assertEqual(
                history[0].url,
                API_BASE_URL + '/forms?workspace_id={}'.format(WORKSPACE_ID))
            self.assertEqual(history[0].method, 'GET')

    def test_forms_correct_params(self):
        """
        paramters are sent correctly
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.get(API_BASE_URL + '/forms', json={})
            self.forms.list(page=2,
                            pageSize=10,
                            search='forms_correct_params',
                            workspaceId=WORKSPACE_ID)

            history = m.request_history
            query = history[0].url.split('?')[1]
            params = dict(urllib.parse.parse_qs(query))

            self.assertEqual(params.pop('page')[0], '2')
            self.assertEqual(params.pop('page_size')[0], '10')
            self.assertEqual(params.pop('search')[0], 'forms_correct_params')
            self.assertEqual(params.pop('workspace_id')[0], WORKSPACE_ID)

    def test_forms_get_correct_id(self):
        """
        get sends the correct UID
        """
        with requests_mock.mock() as m:
            m.get(API_BASE_URL + '/forms/' + self.formID, json={})
            self.forms.get(self.formID)

            history = m.request_history
            self.assertEqual(history[0].url,
                             API_BASE_URL + '/forms/' + self.formID)

    def test_forms_get_sets_get_method(self):
        """
        get sets get method
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.get(API_BASE_URL + '/forms/' + self.formID, json={})
            self.forms.get(self.formID)

            history = m.request_history
            self.assertEqual(history[0].method, 'GET')

    def test_forms_update_updates_a_form(self):
        """
        update updates a form
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            title = 'forms_update_updates_a_form'
            m.put(API_BASE_URL + '/forms/' + self.formID,
                  json=dict(title=title))
            result = self.forms.update(self.formID, data={'title': title})

            self.assertEqual(result.get('title'), title)

    def test_forms_update_as_patch_updates_a_form(self):
        """
        update as patch updates a form
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.patch(API_BASE_URL + '/forms/' + self.formID, json='OK')
            result = self.forms.update(
                self.formID,
                patch=True,
                data=[
                    dict(op='replace',
                         path='/title',
                         value='forms_update_as_patch_updates_a_form')
                ])

            self.assertEqual(result, 'OK')

    def test_forms_update_sets_put_method_in_request_by_default(self):
        """
        update sets put method in request by default
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.put(API_BASE_URL + '/forms/' + self.formID, json={})
            self.forms.update(
                self.formID,
                data={
                    'title':
                    'forms_update_sets_put_method_in_request_by_default'
                })

            history = m.request_history

            self.assertEqual(history[0].method, 'PUT')

    def test_forms_delete_removes_the_correct_uid_form(self):
        """
        delete removes the correct uid form
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.get(API_BASE_URL + '/forms/{}'.format(self.formID),
                  json=dict(id=str(self.formID)))
            m.delete(API_BASE_URL + '/forms/{}'.format(self.formID), json={})

            get_one_result = self.forms.get(self.formID)
            self.assertEqual(get_one_result.get('id'), self.formID)
            self.forms.delete(self.formID)
            m.get(API_BASE_URL + '/forms/{}'.format(self.formID),
                  json=dict(code='FORM_NOT_FOUND',
                            description='Non existing form with uid {}'.format(
                                self.formID)))
            try:
                self.forms.get(self.formID)
            except Exception as err:
                error = str(err)
            self.assertEqual(error,
                             'Non existing form with uid %s' % self.formID)

    def test_forms_create_has_the_correct_path_and_method(self):
        """
        create has the correct path and method
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.post(API_BASE_URL + '/forms', json={})
            self.forms.create(
                dict(title='forms_create_has_the_correct_path_and_method',
                     workspace={'href': WORKSPACE}))

            history = m.request_history

            self.assertEqual(history[0].method, 'POST')
            self.assertEqual(history[0].url, API_BASE_URL + '/forms')

    def test_forms_create_creates_a_new_form(self):
        """
        create creates a new form
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.post(API_BASE_URL + '/forms', json=dict(id=str(self.formID)))
            m.get(API_BASE_URL + '/forms/{}'.format(self.formID),
                  json=dict(id=str(self.formID)))

            create_result = self.forms.create(
                dict(
                    title='forms_create_creates_a_new_form',
                    workspace={'href': WORKSPACE},
                ))

            formID = create_result.get('id')

            result = self.forms.get(formID)

            self.assertIsNone(create_result.get('code', None))
            self.assertEqual(result.get('id'), formID)

    def test_forms_get_messages_has_the_correct_path_and_method(self):
        """
        get messages has the correct path and method
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.get(API_BASE_URL + '/forms/' + self.formID + '/messages',
                  json={})
            self.forms.messages.get(self.formID)

            history = m.request_history

            self.assertEqual(history[0].method, 'GET')
            self.assertEqual(
                history[0].url,
                API_BASE_URL + '/forms/' + self.formID + '/messages')

    def test_forms_update_messages_has_the_correct_path_and_method(self):
        """
        update messages has the correct path and method
        """
        with requests_mock.mock(real_http=not MOCK) as m:
            m.put(API_BASE_URL + '/forms/' + self.formID + '/messages')
            self.forms.messages.update(self.formID)

            history = m.request_history

            self.assertEqual(history[0].method, 'PUT')
            self.assertEqual(
                history[0].url,
                API_BASE_URL + '/forms/' + self.formID + '/messages')