Skip to content

Commit f713b00

Browse files
authored
Merge pull request #18 from apibyexample/17-take-queryParams-seriously
Test query params
2 parents 2963d43 + c6e2790 commit f713b00

2 files changed

Lines changed: 35 additions & 2 deletions

File tree

abe/unittest.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
import os
2+
try:
3+
from urlparse import parse_qs
4+
except ImportError:
5+
from urllib.parse import parse_qs
26

37
from .mocks import AbeMock
48
from .utils import normalize, subkeys
@@ -125,6 +129,18 @@ def assert_headers_contain(self, response_data, spec_data):
125129
"header {0}".format(expected_header)
126130
)
127131

132+
def assert_query_params_equal(self, request_data, spec_data):
133+
qs = parse_qs(request_data)
134+
for k, expected_value in spec_data.items():
135+
try:
136+
actual_value = qs[k]
137+
except KeyError:
138+
raise AssertionError('Missing {0} from request'.format(k))
139+
140+
if len(actual_value) == 1:
141+
actual_value = actual_value[0]
142+
self.assertEqual(expected_value, actual_value)
143+
128144
def assert_matches_request(self, sample_request, wsgi_request,
129145
non_strict=None):
130146
"""
@@ -144,6 +160,12 @@ def assert_matches_request(self, sample_request, wsgi_request,
144160
wsgi_request.META, sample_request['headers']
145161
)
146162

163+
if 'queryParams' in sample_request and 'queryParams' not in non_strict:
164+
self.assert_query_params_equal(
165+
wsgi_request.META['QUERY_STRING'],
166+
sample_request['queryParams']
167+
)
168+
147169
if 'body' in sample_request:
148170
self.assert_data_equal(
149171
wsgi_request.POST, sample_request['body'], non_strict)

tests/test_assertions.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,10 @@ def setUp(self):
115115
"examples": {
116116
"OK": {
117117
"request": {
118-
"queryParams": {},
118+
"queryParams": {
119+
"foo": "1",
120+
"bar": "2"
121+
},
119122
"body": {
120123
"name": "My Resource"
121124
},
@@ -133,7 +136,8 @@ def setUp(self):
133136
META={
134137
'HTTP_THIS_CUSTOM_HEADER': 'Foo',
135138
'REQUEST_METHOD': 'POST',
136-
'PATH_INFO': '/resource/'
139+
'PATH_INFO': '/resource/',
140+
'QUERY_STRING': 'foo=1&bar=2'
137141
},
138142
)
139143

@@ -172,6 +176,13 @@ def test_matches_non_strict(self):
172176
self.sample_request, self.mock_wsgi_request, non_strict=['name']
173177
)
174178

179+
def test_assertion_error_if_query_params_mismatch(self):
180+
self.mock_wsgi_request.META['QUERY_STRING'] = "foo=1"
181+
with self.assertRaises(AssertionError):
182+
self.assert_matches_request(
183+
self.sample_request, self.mock_wsgi_request
184+
)
185+
175186

176187
def _abe_wrap_response(response):
177188
abe_mock = AbeMock({

0 commit comments

Comments
 (0)