kopia lustrzana https://github.com/simonw/datasette
Request.fake(... url_vars), plus .fake() is now documented
Also made 'from datasette import Request' shortcut work. Closes #1697pull/1703/head
rodzic
e73fa72917
commit
5c5e9b3657
|
@ -1,5 +1,5 @@
|
|||
from datasette.version import __version_info__, __version__ # noqa
|
||||
from datasette.utils.asgi import Forbidden, NotFound, Response # noqa
|
||||
from datasette.utils.asgi import Forbidden, NotFound, Request, Response # noqa
|
||||
from datasette.utils import actor_matches_allow # noqa
|
||||
from .hookspecs import hookimpl # noqa
|
||||
from .hookspecs import hookspec # noqa
|
||||
|
|
|
@ -118,7 +118,7 @@ class Request:
|
|||
return dict(parse_qsl(body.decode("utf-8"), keep_blank_values=True))
|
||||
|
||||
@classmethod
|
||||
def fake(cls, path_with_query_string, method="GET", scheme="http"):
|
||||
def fake(cls, path_with_query_string, method="GET", scheme="http", url_vars=None):
|
||||
"""Useful for constructing Request objects for tests"""
|
||||
path, _, query_string = path_with_query_string.partition("?")
|
||||
scope = {
|
||||
|
@ -130,6 +130,8 @@ class Request:
|
|||
"scheme": scheme,
|
||||
"type": "http",
|
||||
}
|
||||
if url_vars:
|
||||
scope["url_route"] = {"kwargs": url_vars}
|
||||
return cls(scope, None)
|
||||
|
||||
|
||||
|
|
|
@ -60,6 +60,33 @@ The object also has two awaitable methods:
|
|||
``await request.post_body()`` - bytes
|
||||
Returns the un-parsed body of a request submitted by ``POST`` - useful for things like incoming JSON data.
|
||||
|
||||
And a class method that can be used to create fake request objects for use in tests:
|
||||
|
||||
``fake(path_with_query_string, method="GET", scheme="http", url_vars=None)``
|
||||
Returns a ``Request`` instance for the specified path and method. For example:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from datasette import Request
|
||||
from pprint import pprint
|
||||
|
||||
request = Request.fake("/fixtures/facetable/", url_vars={
|
||||
"database": "fixtures",
|
||||
"table": "facetable"
|
||||
})
|
||||
pprint(request.scope)
|
||||
|
||||
This outputs::
|
||||
|
||||
{'http_version': '1.1',
|
||||
'method': 'GET',
|
||||
'path': '/fixtures/facetable/',
|
||||
'query_string': b'',
|
||||
'raw_path': b'/fixtures/facetable/',
|
||||
'scheme': 'http',
|
||||
'type': 'http',
|
||||
'url_route': {'kwargs': {'database': 'fixtures', 'table': 'facetable'}}}
|
||||
|
||||
.. _internals_multiparams:
|
||||
|
||||
The MultiParams class
|
||||
|
|
|
@ -75,6 +75,13 @@ def test_request_args():
|
|||
request.args["missing"]
|
||||
|
||||
|
||||
def test_request_fake_url_vars():
|
||||
request = Request.fake("/")
|
||||
assert request.url_vars == {}
|
||||
request = Request.fake("/", url_vars={"database": "fixtures"})
|
||||
assert request.url_vars == {"database": "fixtures"}
|
||||
|
||||
|
||||
def test_request_repr():
|
||||
request = Request.fake("/foo?multi=1&multi=2&single=3")
|
||||
assert (
|
||||
|
|
Ładowanie…
Reference in New Issue