File: test_app_initializers.py

package info (click to toggle)
python-falcon 4.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,172 kB
  • sloc: python: 33,608; javascript: 92; sh: 50; makefile: 50
file content (54 lines) | stat: -rw-r--r-- 1,432 bytes parent folder | download
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
import pytest

import falcon
from falcon import media
from falcon import testing


class MediaResource:
    def on_get(self, req, resp):
        resp.media = {'foo': 'bar'}

    def on_post(self, req, resp):
        resp.media = req.media


class PlainTextHandler(media.BaseHandler):
    def serialize(self, media, content_type):
        return str(media).encode()

    def deserialize(self, stream, content_type, content_length):
        return stream.read().decode()


@pytest.fixture
def client(request):
    app = request.param(media_type=falcon.MEDIA_XML)
    app.add_route('/', MediaResource())

    app.resp_options.default_media_type = falcon.MEDIA_TEXT

    handlers = falcon.media.Handlers({'text/plain': PlainTextHandler()})
    app.req_options.media_handlers = handlers
    app.resp_options.media_handlers = handlers

    return testing.TestClient(app)


@pytest.mark.parametrize(
    'client',
    (
        falcon.App,
        falcon.API,
    ),
    indirect=True,
)
@pytest.mark.filterwarnings('ignore:Call to deprecated function')
def test_api_media_type_overriding(client):
    response = client.simulate_get('/')
    assert response.text == "{'foo': 'bar'}"
    assert response.headers['content-type'] == falcon.MEDIA_TEXT

    response = client.simulate_post('/', body='foobar', content_type=falcon.MEDIA_TEXT)
    assert response.text == 'foobar'
    assert response.headers['content-type'] == falcon.MEDIA_TEXT