mirror of
https://github.com/kennethreitz/responder.git
synced 2026-06-05 23:00:17 +00:00
160 lines
3.3 KiB
Python
160 lines
3.3 KiB
Python
import pytest
|
|
import yaml
|
|
import responder
|
|
import graphene
|
|
|
|
|
|
@pytest.fixture
|
|
def api():
|
|
return responder.API()
|
|
|
|
|
|
@pytest.fixture
|
|
def flask():
|
|
import flask
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route("/")
|
|
def hello():
|
|
return "Hello World!"
|
|
|
|
return app
|
|
|
|
|
|
@pytest.fixture
|
|
def schema():
|
|
class Query(graphene.ObjectType):
|
|
hello = graphene.String(name=graphene.String(default_value="stranger"))
|
|
|
|
def resolve_hello(self, info, name):
|
|
return "Hello " + name
|
|
|
|
return graphene.Schema(query=Query)
|
|
|
|
|
|
def test_api_basic_route(api):
|
|
@api.route("/")
|
|
def home(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
|
|
def test_api_basic_route_overlap(api):
|
|
@api.route("/")
|
|
def home(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
with pytest.raises(AssertionError):
|
|
|
|
@api.route("/")
|
|
def home2(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
|
|
def test_api_basic_route_overlap_alternative(api):
|
|
@api.route("/")
|
|
def home(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
def home2(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
with pytest.raises(AssertionError):
|
|
api.add_route("/", home2)
|
|
|
|
|
|
def test_api_basic_route_overlap_allowed(api):
|
|
@api.route("/")
|
|
def home(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
def home2(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
api.add_route("/", home2, check_existing=False)
|
|
|
|
|
|
def test_api_basic_route_overlap_allowed_alternative(api):
|
|
@api.route("/")
|
|
def home(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
@api.route("/", check_existing=False)
|
|
def home2(req, resp):
|
|
resp.text = "hello world!"
|
|
|
|
|
|
def test_class_based_view_registration(api):
|
|
@api.route("/")
|
|
class ThingsResource:
|
|
def on_request(req, resp):
|
|
resp.text = "42"
|
|
|
|
|
|
def test_requests_session(api):
|
|
assert api.session()
|
|
|
|
|
|
def test_requests_session_works(api):
|
|
TEXT = "spiral out"
|
|
|
|
@api.route("/")
|
|
def hello(req, resp):
|
|
resp.text = TEXT
|
|
|
|
assert api.session().get("http://app/").text == TEXT
|
|
|
|
|
|
def test_status_code(api):
|
|
@api.route("/")
|
|
def hello(req, resp):
|
|
resp.text = "keep going"
|
|
resp.status_code = responder.status_codes.HTTP_416
|
|
|
|
assert (
|
|
api.session().get("http://app/").status_code == responder.status_codes.HTTP_416
|
|
)
|
|
|
|
|
|
def test_json_media(api):
|
|
dump = {"life": 42}
|
|
|
|
@api.route("/")
|
|
def media(req, resp):
|
|
resp.media = dump
|
|
|
|
r = api.session().get("http://app/")
|
|
|
|
assert "json" in r.headers["Content-Type"]
|
|
assert r.json() == dump
|
|
|
|
|
|
def test_yaml_media(api):
|
|
dump = {"life": 42}
|
|
|
|
@api.route("/")
|
|
def media(req, resp):
|
|
resp.media = dump
|
|
|
|
r = api.session().get("http://app/", headers={"Accept": "yaml"})
|
|
|
|
assert "yaml" in r.headers["Content-Type"]
|
|
assert yaml.load(r.content) == dump
|
|
|
|
|
|
def test_graphql_schema_query_querying(api, schema):
|
|
api.add_route("/", schema)
|
|
|
|
r = api.session().get("http://app/?q={ hello }", headers={"Accept": "json"})
|
|
assert r.json() == {"data": {"hello": None}}
|
|
|
|
|
|
def test_argumented_routing(api):
|
|
@api.route("/{name}")
|
|
def hello(req, resp, *, name):
|
|
print("yay")
|
|
resp.text = f"Hello, {name}."
|
|
|
|
r = api.session().get("http://app/sean")
|
|
assert r.text == "Hello, sean."
|