Skip to content
This repository was archived by the owner on Jul 3, 2023. It is now read-only.

Commit f1be2bb

Browse files
committed
Mocking is not effective on all tests
1 parent fb1d907 commit f1be2bb

File tree

3 files changed

+84
-57
lines changed

3 files changed

+84
-57
lines changed

typeform/test/fixtures.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import os
22

3+
# Set to True to use mocked requests.
4+
# A False here will make the test suite hit the real API. Set TOKEN and WORKSPACE below to make it work.
5+
MOCK = False
6+
37
# Don't use your own account for this, this will delete pretty much everything you have!
48
TOKEN = os.environ.get('TYPEFORM_TOKEN')
59

610
# Tests will be scoped to this workspace.
7-
WORKSPACE = 'https://api.typeform.com/workspaces/[YOUR WORKSPACE ID]'
11+
WORKSPACE = 'https://api.typeform.com/workspaces/hn3dNa'
812
WORKSPACE_ID = WORKSPACE.split('/')[-1]
913

10-
if not TOKEN or '[YOUR WORKSPACE ID]' in WORKSPACE:
14+
if MOCK and (not TOKEN or '[YOUR WORKSPACE ID]' in WORKSPACE):
1115
raise Exception("You need to setup TOKEN and WORKSPACE in fixtures.py")

typeform/test/test_forms.py

Lines changed: 53 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import requests_mock
33
import urllib.parse
44

5-
from .fixtures import TOKEN, WORKSPACE, WORKSPACE_ID
5+
from .fixtures import MOCK, TOKEN, WORKSPACE, WORKSPACE_ID
66

77
from typeform import Typeform
88
from typeform.constants import API_BASE_URL
@@ -11,20 +11,24 @@
1111
class FormsTestCase(TestCase):
1212
def setUp(self):
1313
self.forms = Typeform(TOKEN).forms
14-
form = self.forms.create(dict(title="Form's test form", workspace={'href': WORKSPACE}))
15-
self.formID = form.get('id')
14+
if not MOCK:
15+
form = self.forms.create(dict(title="Form's test form", workspace={'href': WORKSPACE}))
16+
self.formID = form.get('id')
17+
else:
18+
self.formID = "MOCK-FORM-ID"
1619

1720
def tearDown(self):
18-
list = self.forms.list(workspaceId=WORKSPACE_ID)
19-
forms = list.get('items', [])
20-
for form in forms:
21-
self.forms.delete(form.get('id'))
21+
if not MOCK:
22+
list = self.forms.list(workspaceId=WORKSPACE_ID)
23+
forms = list.get('items', [])
24+
for form in forms:
25+
self.forms.delete(form.get('id'))
2226

2327
def test_forms_returns_method_and_path(self):
2428
"""
2529
get all forms has the correct method and path
2630
"""
27-
with requests_mock.mock() as m:
31+
with requests_mock.mock(real_http=not MOCK) as m:
2832
m.get(API_BASE_URL+'/forms', json={})
2933
self.forms.list(workspaceId=WORKSPACE_ID)
3034

@@ -36,7 +40,7 @@ def test_forms_correct_params(self):
3640
"""
3741
paramters are sent correctly
3842
"""
39-
with requests_mock.mock() as m:
43+
with requests_mock.mock(real_http=not MOCK) as m:
4044
m.get(API_BASE_URL+'/forms', json={})
4145
self.forms.list(page=2, pageSize=10, search='forms_correct_params', workspaceId=WORKSPACE_ID)
4246

@@ -64,7 +68,7 @@ def test_forms_get_sets_get_method(self):
6468
"""
6569
get sets get method
6670
"""
67-
with requests_mock.mock() as m:
71+
with requests_mock.mock(real_http=not MOCK) as m:
6872
m.get(API_BASE_URL+'/forms/'+self.formID, json={})
6973
self.forms.get(self.formID)
7074

@@ -75,30 +79,31 @@ def test_forms_update_updates_a_form(self):
7579
"""
7680
update updates a form
7781
"""
78-
title = 'forms_update_updates_a_form'
79-
result = self.forms.update(self.formID, data={
80-
'title': title
81-
})
82+
with requests_mock.mock(real_http=not MOCK) as m:
83+
title = 'forms_update_updates_a_form'
84+
m.put(API_BASE_URL + '/forms/' + self.formID, json=dict(title=title))
85+
result = self.forms.update(self.formID, data={
86+
'title': title
87+
})
8288

83-
self.assertEqual(result.get('title'), title)
89+
self.assertEqual(result.get('title'), title)
8490

8591
def test_forms_update_as_patch_updates_a_form(self):
8692
"""
8793
update as patch updates a form
8894
"""
89-
result = self.forms.update(self.formID, patch=True, data=[{
90-
'op': 'replace',
91-
'path': '/title',
92-
'value': 'forms_update_as_patch_updates_a_form'
93-
}])
95+
with requests_mock.mock(real_http=not MOCK) as m:
96+
m.patch(API_BASE_URL+'/forms/'+self.formID, json="OK")
97+
result = self.forms.update(self.formID, patch=True, data=[
98+
dict(op='replace', path='/title', value='forms_update_as_patch_updates_a_form')])
9499

95-
self.assertEqual(result, 'OK')
100+
self.assertEqual(result, 'OK')
96101

97102
def test_forms_update_sets_put_method_in_request_by_default(self):
98103
"""
99104
update sets put method in request by default
100105
"""
101-
with requests_mock.mock() as m:
106+
with requests_mock.mock(real_http=not MOCK) as m:
102107
m.put(API_BASE_URL+'/forms/'+self.formID, json={})
103108
self.forms.update(self.formID, data={
104109
'title': 'forms_update_sets_put_method_in_request_by_default'
@@ -112,20 +117,26 @@ def test_forms_delete_removes_the_correct_uid_form(self):
112117
"""
113118
delete removes the correct uid form
114119
"""
115-
get1Result = self.forms.get(self.formID)
116-
self.assertEqual(get1Result.get('id'), self.formID)
117-
self.forms.delete(self.formID)
118-
try:
119-
self.forms.get(self.formID)
120-
except Exception as err:
121-
error = str(err)
122-
self.assertEqual(error, 'Non existing form with uid %s' % self.formID)
120+
with requests_mock.mock(real_http=not MOCK) as m:
121+
m.get(API_BASE_URL + '/forms/{}'.format(self.formID), json=dict(id=str(self.formID)))
122+
m.delete(API_BASE_URL + '/forms/{}'.format(self.formID), json={})
123+
124+
get_one_result = self.forms.get(self.formID)
125+
self.assertEqual(get_one_result.get('id'), self.formID)
126+
self.forms.delete(self.formID)
127+
m.get(API_BASE_URL + '/forms/{}'.format(self.formID),
128+
json=dict(code="FORM_NOT_FOUND", description="Non existing form with uid {}".format(self.formID)))
129+
try:
130+
self.forms.get(self.formID)
131+
except Exception as err:
132+
error = str(err)
133+
self.assertEqual(error, 'Non existing form with uid %s' % self.formID)
123134

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

@@ -138,20 +149,24 @@ def test_forms_create_creates_a_new_form(self):
138149
"""
139150
create creates a new form
140151
"""
141-
createResult = self.forms.create(dict(title='forms_create_creates_a_new_form', workspace={'href': WORKSPACE}))
152+
with requests_mock.mock(real_http=not MOCK) as m:
153+
m.post(API_BASE_URL + '/forms', json=dict(id=str(self.formID)))
154+
m.get(API_BASE_URL + '/forms/{}'.format(self.formID), json=dict(id=str(self.formID)))
155+
156+
create_result = self.forms.create(dict(title='forms_create_creates_a_new_form', workspace={'href': WORKSPACE}))
142157

143-
formID = createResult.get('id')
158+
formID = create_result.get('id')
144159

145-
getResult = self.forms.get(formID)
160+
result = self.forms.get(formID)
146161

147-
self.assertIsNone(createResult.get('code', None))
148-
self.assertEqual(getResult.get('id'), formID)
162+
self.assertIsNone(create_result.get('code', None))
163+
self.assertEqual(result.get('id'), formID)
149164

150165
def test_forms_get_messages_has_the_correct_path_and_method(self):
151166
"""
152167
get messages has the correct path and method
153168
"""
154-
with requests_mock.mock() as m:
169+
with requests_mock.mock(real_http=not MOCK) as m:
155170
m.get(API_BASE_URL+'/forms/'+self.formID+'/messages', json={})
156171
self.forms.messages.get(self.formID)
157172

@@ -164,7 +179,7 @@ def test_forms_update_messages_has_the_correct_path_and_method(self):
164179
"""
165180
update messages has the correct path and method
166181
"""
167-
with requests_mock.mock() as m:
182+
with requests_mock.mock(real_http=not MOCK) as m:
168183
m.put(API_BASE_URL+'/forms/'+self.formID+'/messages')
169184
self.forms.messages.update(self.formID)
170185

typeform/test/test_responses.py

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import requests_mock
33
import urllib.parse
44

5-
from .fixtures import TOKEN, WORKSPACE, WORKSPACE_ID
5+
from .fixtures import MOCK, TOKEN, WORKSPACE, WORKSPACE_ID
66

77
from typeform import Typeform
88
from typeform.constants import API_BASE_URL
@@ -12,20 +12,24 @@ class ResponsesTestCase(TestCase):
1212
def setUp(self):
1313
self.forms = Typeform(TOKEN).forms
1414
self.responses = Typeform(TOKEN).responses
15-
form = self.forms.create((dict(title="Responses's test form", workspace={'href': WORKSPACE})))
16-
self.formID = form.get('id')
15+
if not MOCK:
16+
form = self.forms.create((dict(title="Responses's test form", workspace={'href': WORKSPACE})))
17+
self.formID = form.get('id')
18+
else:
19+
self.formID = "MOCK-FORM-ID"
1720

1821
def tearDown(self):
19-
list = self.forms.list(workspaceId=WORKSPACE_ID)
20-
forms = list.get('items', [])
21-
for form in forms:
22-
self.forms.delete(form.get('id'))
22+
if not MOCK:
23+
list = self.forms.list(workspaceId=WORKSPACE_ID)
24+
forms = list.get('items', [])
25+
for form in forms:
26+
self.forms.delete(form.get('id'))
2327

2428
def test_list_returns_method_and_path(self):
2529
"""
2630
get all responses has the correct method and path
2731
"""
28-
with requests_mock.mock() as m:
32+
with requests_mock.mock(real_http=not MOCK) as m:
2933
url = API_BASE_URL+'/forms/'+self.formID+'/responses'
3034
m.get(url, json={})
3135
self.responses.list(self.formID)
@@ -38,7 +42,7 @@ def test_list_correct_params(self):
3842
"""
3943
paramters are sent correctly
4044
"""
41-
with requests_mock.mock() as m:
45+
with requests_mock.mock(real_http=not MOCK) as m:
4246
url = API_BASE_URL+'/forms/'+self.formID+'/responses'
4347
m.get(url, json={})
4448
self.responses.list(
@@ -58,23 +62,27 @@ def test_list_fetches_responses(self):
5862
"""
5963
get all responses does not throw an error
6064
"""
61-
result = self.responses.list(self.formID)
62-
self.assertEqual(result.pop('total_items'), 0)
65+
with requests_mock.mock(real_http=not MOCK) as m:
66+
m.get(API_BASE_URL+'/forms/{}/responses'.format(self.formID), json=dict(total_items=0))
67+
result = self.responses.list(self.formID)
68+
self.assertEqual(result.pop('total_items'), 0)
6369

6470
def test_list_fetches_responses_with_params(self):
6571
"""
6672
get all responses does not throw an error with parameters
6773
"""
68-
result = self.responses.list(
69-
self.formID, pageSize=100, since='2000-01-01T00:00:00Z', completed=True, fields=['1', '2']
70-
)
71-
self.assertEqual(result.pop('total_items'), 0)
74+
with requests_mock.mock(real_http=not MOCK) as m:
75+
m.get(API_BASE_URL+'/forms/{}/responses'.format(self.formID), json=dict(total_items=0))
76+
result = self.responses.list(
77+
self.formID, pageSize=100, since='2000-01-01T00:00:00Z', completed=True, fields=['1', '2']
78+
)
79+
self.assertEqual(result.pop('total_items'), 0)
7280

7381
def test_delete_one_token_returns_method_and_path(self):
7482
"""
7583
delete response has the correct method and path when deleting one token
7684
"""
77-
with requests_mock.mock() as m:
85+
with requests_mock.mock(real_http=not MOCK) as m:
7886
url = API_BASE_URL+'/forms/'+self.formID+'/responses?included_tokens=1'
7987
m.delete(url, json={})
8088
self.responses.delete(self.formID, includedTokens='1')
@@ -87,7 +95,7 @@ def test_delete_multiple_token_returns_method_and_path(self):
8795
"""
8896
delete response has the correct method and path when deleting multiple tokens
8997
"""
90-
with requests_mock.mock() as m:
98+
with requests_mock.mock(real_http=not MOCK) as m:
9199
url = API_BASE_URL+'/forms/'+self.formID+'/responses?included_tokens=1%2C2%2C3'
92100
m.delete(url, json={})
93101
self.responses.delete(self.formID, includedTokens=['1', '2', '3'])

0 commit comments

Comments
 (0)