def test_methods(method): app = Luya('test_methods') class DummyView(MethodView): async def get(self, request): print('进来了') assert request.stream is None return text('', headers={'method': 'GET'}) def post(self, request): return text('', headers={'method': 'POST'}) async def put(self, request): return text('', headers={'method': 'PUT'}) def head(self, request): return text('', headers={'method': 'HEAD'}) def options(self, request): return text('', headers={'method': 'OPTIONS'}) async def patch(self, request): return text('', headers={'method': 'PATCH'}) def delete(self, request): return text('', headers={'method': 'DELETE'}) app.add_route(DummyView.to_view(), '/') assert app.has_stream is False response = getattr(app.test_client, method.lower())('/') assert response.headers['method'] == method
def test_url_prefix(): app = Luya('test_url_prefix') bp = Blueprint('test_url_prefix', prefix_url='/bp') @bp.route('/') def handler(request): return text('Hello') app.register_blueprint(bp) rsp = app.test_client.get('/bp/') assert rsp.text == 'Hello'
def test_argument_methods(): app = Luya('test_argument_methods') class DummyView(MethodView): def get(self, request, my_param_here): return text('I am get method with %s' % my_param_here) app.add_route(DummyView.to_view(), '/<my_param_here>') response = app.test_client.get('/test123') assert response.text == 'I am get method with test123'
def test_unexisting_methods(): app = Luya('test_unexisting_methods') class DummyView(MethodView): def get(self, request): return text('I am get method') app.add_route(DummyView.to_view(), '/') response = app.test_client.get('/') assert response.text == 'I am get method' response = app.test_client.post('/') assert response.text == '<h3>/ is not allow POST<h3>'
def test_add_route_method_not_allowed(): app = Luya('test_add_route_method_not_allowed') async def handler(request): return text('OK') app.add_route(handler, '/test', methods=['GET']) response = app.test_client.get('/test') assert response.status == 200 response = app.test_client.post('/test') assert response.status == 405
def test_with_bp_with_url_prefix(): app = Luya('test_with_bp_with_url_prefix') bp = Blueprint('test_text', prefix_url='/test1') class DummyView(MethodView): def get(self, request): return text('I am get method') bp.add_route(DummyView.to_view(), '/') app.register_blueprint(bp) response = app.test_client.get('/test1/') assert response.text == 'I am get method'
def test_dynamic_add_route(): app = Luya('test_dynamic_add_route') results = [] async def handler(request, name): results.append(name) return text('OK') app.add_route(handler, '/folder/<name>') response = app.test_client.get('/folder/test123') assert response.text == 'OK' assert results[0] == 'test123'
def test_route_invalid_parameter_syntax(): with pytest.raises(ValueError): app = Luya('test_route_invalid_param_syntax') @app.route('/get/<:string>') def handler(request): return text('OK')
def test_basic_blueprint(): ''' To test basic blueprint. ''' app = Luya('test_basic_blueprint') bp = Blueprint('test_basic_blueprint') @bp.route('/') def handler(request): return text('Hello') app.register_blueprint(bp) rsp = app.test_client.get('/') assert app.has_stream == False assert rsp.text == 'Hello'
def test_with_bp(): app = Luya('test_with_bp') bp = Blueprint('test_text') class DummyView(MethodView): def get(self, request): assert request.stream is None return text('I am get method') bp.add_route(DummyView.to_view(), '/') app.register_blueprint(bp) response = app.test_client.get('/') assert app.has_stream is False assert response.text == 'I am get method'
def test_dynamic_add_route_int(): app = Luya('test_dynamic_add_route_int') results = [] async def handler(request, folder_id): results.append(folder_id) return text('OK') app.add_route(handler, '/folder/<folder_id:int>') response = app.test_client.get('/folder/12345') assert response.text == 'OK' assert type(results[0]) is int response = app.test_client.get('/folder/asdf') assert response.status == 404
def json_app(): app = Luya('json') @app.route("/") async def test(request): return json(JSON_DATA) return app
def streaming_app(): app = Luya('streaming') @app.route("/") async def test(request): return stream(sample_streaming_fn, content_type='text/csv') return app
def test_with_custom_class_methods(): app = Luya('test_with_custom_class_methods') class DummyView(MethodView): global_var = 0 def _iternal_method(self): self.global_var += 10 def get(self, request): self._iternal_method() return text('I am get method and global var is {}'.format( self.global_var)) app.add_route(DummyView.to_view(), '/') response = app.test_client.get('/') assert response.text == 'I am get method and global var is 10'
def test_text(): app = Luya('test_text') @app.route('/') async def handler(request): return text('Hello') response = app.test_client.get('/') assert response.text == 'Hello'
def test_remote_address(): app = Luya('test_text') @app.route('/') def handler(request): # print(request.ip) return text("{}".format(request.ip)) response = app.test_client.get('/') assert response.text == '127.0.0.1'
def test_match_info(): app = Luya('test_match_info') arg = [None] @app.route('/api/v1/user/<user_id>/') async def handler(request, user_id): arg[0] = user_id return text('OK') response = app.test_client.get('/api/v1/user/sanic_user/') assert arg[0] == 'sanic_user'
def test_headers(): app = Luya('test_text') @app.route('/') async def handler(request): headers = {"spam": "great"} return text('Hello', headers=headers) response = app.test_client.get('/') assert response.headers.get('spam') == 'great'
def test_invalid_json(): app = Luya('test_json') @app.route('/', methods=['POST']) async def handler(request): return json(request.json) data = "I am not json" response = app.test_client.post('/', data=data) assert response.status == 400
def test_empty_json(): app = Luya('test_json') @app.route('/') async def handler(request): assert request.json == None return json(request.json) response = app.test_client.get('/') assert response.status == 200 assert response.text == 'null'
def test_response_body_not_a_string(): """Test when a response body sent from the application is not a string""" app = Luya('response_body_not_a_string') random_num = choice(range(1000)) @app.route('/hello') async def hello_route(request): return HTTPResponse(body=random_num) response = app.test_client.get('/hello') assert response.text == str(random_num)
def test_dynamic_add_route_number(): app = Luya('test_dynamic_add_route_number') results = [] async def handler(request, weight): results.append(weight) return text('OK') app.add_route(handler, '/weight/<weight:number>') response = app.test_client.get('/weight/12345') assert response.text == 'OK' assert type(results[0]) is float response = app.test_client.get('/weight/1234.56') assert response.status == 200 response = app.test_client.get('/weight/1234-56') assert response.status == 404
def test_non_str_headers(): app = Luya('test_text') @app.route('/') async def handler(request): headers = {"answer": 42} return text('Hello', headers=headers) response = app.test_client.get('/') assert response.headers.get('answer') == '42'
def test_route_post(): app = Luya('test_route_get') @app.route('/post', methods=['POST']) def handler(request): return text('OK') response = app.test_client.get('/post') assert response.status == 405 response2 = app.test_client.post('/post') assert response2.text == 'OK'
def test_route_get(): app = Luya('test_route_get') @app.route('/get') def handler(request): return text('OK') response = app.test_client.get('/get') assert response.text == 'OK' response2 = app.test_client.post('/get') assert response2.status == 405
def test_json(): app = Luya('test_json') @app.route('/') async def handler(request): return json({"test": True}) response = app.test_client.get('/') results = json_loads(response.text) assert results.get('test') == True
def test_one_Blueprint(self): app = Luya() class Mv(MethodView): def __init__(self): pass def get(self, request): return response.html('<h1>class view test</h1>') def post(self, request): return response.html('<h1>post</h1>') app.add_route(Mv.to_view(), '/MethodView') request = request_class(url='/MethodView', method='GET') handler, kw = app.router.get_mapped_handle(request) self.assertEqual(kw, {}) self.assertEqual(handler(request).status, 200) request = request_class(url='/MethodView', method='POST')
def test_invalid_response(): app = Luya('test_invalid_response') @app.exception(ServerError) def handler_exception(request, exception): return text('Internal Server Error.', 500) @app.route('/') async def handler(request): return 'This should fail' response = app.test_client.get('/') assert response.status == 500 assert response.text == "Internal Server Error."
def test_query_string(): app = Luya('test_query_string') args = [None] @app.route('/') async def handler(request): args[0] = request.args return text('OK') response = app.test_client.get('/?test1=1&test2=2&test3=false') arg = args[0] assert arg['test1'][0] == '1' assert arg['test2'][0] == '2' assert arg['test3'][0] == 'false'
def test_middleware_override_response(): app = Luya('test_middleware_override_response') @app.middleware('response') async def process_response(request, response): return text('OK') @app.route('/') async def handler(request): return text('FAIL') response = app.test_client.get('/') assert response.status == 200 assert response.text == 'OK'