83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
import asyncio
|
|
|
|
import pytest
|
|
|
|
from sanic.exceptions import SanicException
|
|
from sanic.response import text
|
|
|
|
|
|
def test_app_loop_running(app):
|
|
|
|
@app.get('/test')
|
|
async def handler(request):
|
|
assert isinstance(app.loop, asyncio.AbstractEventLoop)
|
|
return text('pass')
|
|
|
|
request, response = app.test_client.get('/test')
|
|
assert response.text == 'pass'
|
|
|
|
|
|
def test_app_loop_not_running(app):
|
|
with pytest.raises(SanicException) as excinfo:
|
|
app.loop
|
|
|
|
assert str(excinfo.value) == (
|
|
'Loop can only be retrieved after the app has started '
|
|
'running. Not supported with `create_server` function'
|
|
)
|
|
|
|
|
|
def test_app_run_raise_type_error(app):
|
|
|
|
with pytest.raises(TypeError) as excinfo:
|
|
app.run(loop='loop')
|
|
|
|
assert str(excinfo.value) == (
|
|
'loop is not a valid argument. To use an existing loop, '
|
|
'change to create_server().\nSee more: '
|
|
'https://sanic.readthedocs.io/en/latest/sanic/deploying.html'
|
|
'#asynchronous-support'
|
|
)
|
|
|
|
|
|
def test_app_route_raise_value_error(app):
|
|
|
|
with pytest.raises(ValueError) as excinfo:
|
|
@app.route('/test')
|
|
async def handler():
|
|
return text('test')
|
|
|
|
assert str(excinfo.value) == 'Required parameter `request` missing in the handler() route?'
|
|
|
|
|
|
def test_app_handle_request_handler_is_none(app, monkeypatch):
|
|
|
|
def mockreturn(*args, **kwargs):
|
|
return None, [], {}, ''
|
|
|
|
# Not sure how to make app.router.get() return None, so use mock here.
|
|
monkeypatch.setattr(app.router, 'get', mockreturn)
|
|
|
|
@app.get('/test')
|
|
def handler(request):
|
|
return text('test')
|
|
|
|
request, response = app.test_client.get('/test')
|
|
|
|
assert response.text == 'Error: \'None\' was returned while requesting a handler from the router'
|
|
|
|
|
|
@pytest.mark.parametrize('websocket_enabled', [True, False])
|
|
@pytest.mark.parametrize('enable', [True, False])
|
|
def test_enable_websocket(app, websocket_enabled, enable):
|
|
app.websocket_enabled = websocket_enabled
|
|
app.enable_websocket(enable=enable)
|
|
|
|
assert app.websocket_enabled == enable
|
|
|
|
@app.websocket('/ws')
|
|
async def handler(request, ws):
|
|
await ws.send('test')
|
|
|
|
assert app.websocket_enabled == True
|