-
-
Notifications
You must be signed in to change notification settings - Fork 980
Expand file tree
/
Copy pathtest_media_urlencoded.py
More file actions
94 lines (71 loc) · 2.54 KB
/
test_media_urlencoded.py
File metadata and controls
94 lines (71 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import io
import pytest
import falcon
from falcon import media
from falcon import testing
from _util import create_app # NOQA
def test_deserialize_empty_form():
handler = media.URLEncodedFormHandler()
stream = io.BytesIO(b'')
assert handler.deserialize(stream, falcon.MEDIA_URLENCODED, 0) == {}
def test_deserialize_invalid_unicode():
handler = media.URLEncodedFormHandler()
stream = io.BytesIO('spade=♠'.encode())
with pytest.raises(falcon.MediaMalformedError) as err:
handler.deserialize(stream, falcon.MEDIA_URLENCODED, 9)
assert isinstance(err.value.__cause__, UnicodeDecodeError)
@pytest.mark.parametrize(
'data,expected',
[
({'hello': 'world'}, b'hello=world'),
({'number': [1, 2]}, b'number=1&number=2'),
],
)
def test_urlencoded_form_handler_serialize(data, expected):
handler = media.URLEncodedFormHandler()
assert handler.serialize(data, falcon.MEDIA_URLENCODED) == expected
value = falcon.async_to_sync(handler.serialize_async, data, falcon.MEDIA_URLENCODED)
assert value == expected
class MediaMirror:
def on_post(self, req, resp):
resp.media = req.get_media()
class MediaMirrorAsync:
async def on_post(self, req, resp):
resp.media = await req.get_media()
@pytest.fixture
def client(asgi):
app = create_app(asgi)
app.add_route('/media', MediaMirrorAsync() if asgi else MediaMirror())
return testing.TestClient(app)
def test_empty_form(client):
resp = client.simulate_post(
'/media', headers={'Content-Type': 'application/x-www-form-urlencoded'}
)
assert resp.content == b'{}'
@pytest.mark.parametrize(
'body,expected',
[
('a=1&b=&c=3', {'a': '1', 'b': '', 'c': '3'}),
('param=undefined', {'param': 'undefined'}),
('color=green&color=black', {'color': ['green', 'black']}),
(
'food=hamburger+%28%F0%9F%8D%94%29&sauce=BBQ',
{'food': 'hamburger (🍔)', 'sauce': 'BBQ'},
),
('flag%1&flag%2&flag%1&flag%2', {'flag%1': ['', ''], 'flag%2': ['', '']}),
],
)
def test_urlencoded_form(client, body, expected):
resp = client.simulate_post(
'/media',
body=body,
headers={'Content-Type': 'application/x-www-form-urlencoded'},
)
assert resp.json == expected
@pytest.mark.parametrize(
'form', [{}, {'a': '1', 'b': '2'}, (('a', '1'), ('b', '2'), ('c', '3'))]
)
def test_simulate_form(client, form):
resp = client.simulate_post('/media', form=form)
assert resp.status_code == 200
assert resp.json == dict(form)