sanic/tests/test_blueprints.py

311 lines
7.6 KiB
Python
Raw Permalink Normal View History

import inspect
from sanic import Sanic
from sanic.blueprints import Blueprint
from sanic.response import json, text
from sanic.exceptions import NotFound, ServerError, InvalidUsage
# ------------------------------------------------------------ #
# GET
# ------------------------------------------------------------ #
def test_bp():
app = Sanic('test_text')
bp = Blueprint('test_text')
@bp.route('/')
def handler(request):
return text('Hello')
app.blueprint(bp)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/')
assert response.text == 'Hello'
def test_bp_with_url_prefix():
app = Sanic('test_text')
bp = Blueprint('test_text', url_prefix='/test1')
@bp.route('/')
def handler(request):
return text('Hello')
app.blueprint(bp)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/test1/')
assert response.text == 'Hello'
def test_several_bp_with_url_prefix():
app = Sanic('test_text')
bp = Blueprint('test_text', url_prefix='/test1')
bp2 = Blueprint('test_text2', url_prefix='/test2')
@bp.route('/')
def handler(request):
return text('Hello')
@bp2.route('/')
def handler2(request):
return text('Hello2')
app.blueprint(bp)
app.blueprint(bp2)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/test1/')
assert response.text == 'Hello'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/test2/')
assert response.text == 'Hello2'
2017-01-11 02:07:58 +00:00
def test_bp_with_host():
app = Sanic('test_bp_host')
bp = Blueprint('test_bp_host', url_prefix='/test1', host="example.com")
@bp.route('/')
def handler(request):
return text('Hello')
@bp.route('/', host="sub.example.com")
def handler(request):
return text('Hello subdomain!')
2017-01-11 02:07:58 +00:00
app.blueprint(bp)
headers = {"Host": "example.com"}
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get(
'/test1/',
headers=headers)
2017-01-11 02:07:58 +00:00
assert response.text == 'Hello'
headers = {"Host": "sub.example.com"}
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get(
'/test1/',
headers=headers)
assert response.text == 'Hello subdomain!'
2017-01-11 02:07:58 +00:00
def test_several_bp_with_host():
app = Sanic('test_text')
bp = Blueprint('test_text',
url_prefix='/test',
host="example.com")
bp2 = Blueprint('test_text2',
url_prefix='/test',
host="sub.example.com")
@bp.route('/')
def handler(request):
return text('Hello')
@bp2.route('/')
def handler2(request):
return text('Hello2')
@bp2.route('/other/')
def handler2(request):
return text('Hello3')
app.blueprint(bp)
app.blueprint(bp2)
assert bp.host == "example.com"
headers = {"Host": "example.com"}
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get(
'/test/',
headers=headers)
2017-01-11 02:07:58 +00:00
assert response.text == 'Hello'
assert bp2.host == "sub.example.com"
headers = {"Host": "sub.example.com"}
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get(
'/test/',
headers=headers)
2017-01-11 02:07:58 +00:00
assert response.text == 'Hello2'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get(
'/test/other/',
headers=headers)
2017-01-11 02:07:58 +00:00
assert response.text == 'Hello3'
def test_bp_middleware():
app = Sanic('test_middleware')
blueprint = Blueprint('test_middleware')
@blueprint.middleware('response')
async def process_response(request, response):
return text('OK')
@app.route('/')
async def handler(request):
return text('FAIL')
app.blueprint(blueprint)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/')
assert response.status == 200
assert response.text == 'OK'
def test_bp_exception_handler():
app = Sanic('test_middleware')
blueprint = Blueprint('test_middleware')
@blueprint.route('/1')
def handler_1(request):
raise InvalidUsage("OK")
@blueprint.route('/2')
def handler_2(request):
raise ServerError("OK")
@blueprint.route('/3')
def handler_3(request):
raise NotFound("OK")
@blueprint.exception(NotFound, ServerError)
def handler_exception(request, exception):
return text("OK")
app.blueprint(blueprint)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/1')
assert response.status == 400
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/2')
assert response.status == 200
assert response.text == 'OK'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/3')
assert response.status == 200
def test_bp_listeners():
app = Sanic('test_middleware')
blueprint = Blueprint('test_middleware')
order = []
@blueprint.listener('before_server_start')
def handler_1(sanic, loop):
order.append(1)
@blueprint.listener('after_server_start')
def handler_2(sanic, loop):
order.append(2)
@blueprint.listener('after_server_start')
def handler_3(sanic, loop):
order.append(3)
@blueprint.listener('before_server_stop')
def handler_4(sanic, loop):
order.append(5)
@blueprint.listener('before_server_stop')
def handler_5(sanic, loop):
order.append(4)
@blueprint.listener('after_server_stop')
def handler_6(sanic, loop):
order.append(6)
app.blueprint(blueprint)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/')
assert order == [1,2,3,4,5,6]
def test_bp_static():
current_file = inspect.getfile(inspect.currentframe())
with open(current_file, 'rb') as file:
current_file_contents = file.read()
app = Sanic('test_static')
blueprint = Blueprint('test_static')
2016-10-25 10:45:28 +01:00
blueprint.static('/testing.file', current_file)
app.blueprint(blueprint)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/testing.file')
assert response.status == 200
2017-01-11 02:07:58 +00:00
assert response.body == current_file_contents
2017-01-30 07:20:38 +00:00
def test_bp_shorthand():
app = Sanic('test_shorhand_routes')
blueprint = Blueprint('test_shorhand_routes')
2017-01-30 07:21:00 +00:00
@blueprint.get('/get')
2017-01-30 07:20:38 +00:00
def handler(request):
return text('OK')
2017-01-30 07:21:00 +00:00
@blueprint.put('/put')
2017-01-30 07:20:38 +00:00
def handler(request):
return text('OK')
2017-01-30 07:21:00 +00:00
@blueprint.post('/post')
2017-01-30 07:20:38 +00:00
def handler(request):
return text('OK')
2017-01-30 07:21:00 +00:00
@blueprint.head('/head')
2017-01-30 07:20:38 +00:00
def handler(request):
return text('OK')
2017-01-30 07:21:00 +00:00
@blueprint.options('/options')
2017-01-30 07:20:38 +00:00
def handler(request):
return text('OK')
2017-01-30 07:21:00 +00:00
@blueprint.patch('/patch')
2017-01-30 07:20:38 +00:00
def handler(request):
return text('OK')
2017-01-30 07:21:00 +00:00
@blueprint.delete('/delete')
2017-01-30 07:20:38 +00:00
def handler(request):
return text('OK')
app.blueprint(blueprint)
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/get')
2017-01-30 07:20:38 +00:00
assert response.text == 'OK'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.post('/get')
2017-01-30 07:20:38 +00:00
assert response.status == 405
2017-02-14 19:51:20 +00:00
request, response = app.test_client.put('/put')
2017-01-30 07:20:38 +00:00
assert response.text == 'OK'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/post')
2017-01-30 07:20:38 +00:00
assert response.status == 405
2017-02-14 19:51:20 +00:00
request, response = app.test_client.post('/post')
2017-01-30 07:20:38 +00:00
assert response.text == 'OK'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/post')
2017-01-30 07:20:38 +00:00
assert response.status == 405
2017-02-14 19:51:20 +00:00
request, response = app.test_client.head('/head')
2017-01-30 07:21:00 +00:00
assert response.status == 200
2017-01-30 07:20:38 +00:00
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/head')
2017-01-30 07:20:38 +00:00
assert response.status == 405
2017-02-14 19:51:20 +00:00
request, response = app.test_client.options('/options')
2017-01-30 07:20:38 +00:00
assert response.text == 'OK'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/options')
2017-01-30 07:20:38 +00:00
assert response.status == 405
2017-02-14 19:51:20 +00:00
request, response = app.test_client.patch('/patch')
2017-01-30 07:20:38 +00:00
assert response.text == 'OK'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/patch')
2017-01-30 07:20:38 +00:00
assert response.status == 405
2017-02-14 19:51:20 +00:00
request, response = app.test_client.delete('/delete')
2017-01-30 07:20:38 +00:00
assert response.text == 'OK'
2017-02-14 19:51:20 +00:00
request, response = app.test_client.get('/delete')
2017-01-30 07:20:38 +00:00
assert response.status == 405