53 lines
1.1 KiB
Python
53 lines
1.1 KiB
Python
|
from json import loads as sloads
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
|
||
|
try:
|
||
|
from ujson import loads as uloads
|
||
|
|
||
|
NO_UJSON = False
|
||
|
DEFAULT_LOADS = uloads
|
||
|
except ModuleNotFoundError:
|
||
|
NO_UJSON = True
|
||
|
DEFAULT_LOADS = sloads
|
||
|
|
||
|
from sanic import Request, Sanic, json
|
||
|
|
||
|
|
||
|
@pytest.fixture(autouse=True)
|
||
|
def default_back_to_ujson():
|
||
|
yield
|
||
|
Request._loads = DEFAULT_LOADS
|
||
|
|
||
|
|
||
|
def test_change_decoder():
|
||
|
Sanic("Test", loads=sloads)
|
||
|
assert Request._loads == sloads
|
||
|
|
||
|
|
||
|
def test_change_decoder_to_some_custom():
|
||
|
def my_custom_decoder(some_str: str):
|
||
|
dict = sloads(some_str)
|
||
|
dict["some_key"] = "new_value"
|
||
|
return dict
|
||
|
|
||
|
app = Sanic("Test", loads=my_custom_decoder)
|
||
|
assert Request._loads == my_custom_decoder
|
||
|
|
||
|
req_body = {"some_key": "some_value"}
|
||
|
|
||
|
@app.post("/test")
|
||
|
def handler(request):
|
||
|
new_json = request.json
|
||
|
return json(new_json)
|
||
|
|
||
|
req, res = app.test_client.post("/test", json=req_body)
|
||
|
assert sloads(res.body) == {"some_key": "new_value"}
|
||
|
|
||
|
|
||
|
@pytest.mark.skipif(NO_UJSON is True, reason="ujson not installed")
|
||
|
def test_default_decoder():
|
||
|
Sanic("Test")
|
||
|
assert Request._loads == uloads
|