kopia lustrzana https://github.com/simonw/datasette
Docs on datasette.client for tests, closes #1830
Also covers ds.client.actor_cookie() helperpull/2221/head
rodzic
48148e66a8
commit
7506a89be0
|
@ -82,6 +82,34 @@ This method registers any :ref:`plugin_hook_startup` or :ref:`plugin_hook_prepar
|
||||||
|
|
||||||
If you are using ``await datasette.client.get()`` and similar methods then you don't need to worry about this - Datasette automatically calls ``invoke_startup()`` the first time it handles a request.
|
If you are using ``await datasette.client.get()`` and similar methods then you don't need to worry about this - Datasette automatically calls ``invoke_startup()`` the first time it handles a request.
|
||||||
|
|
||||||
|
.. _testing_datasette_client:
|
||||||
|
|
||||||
|
Using datasette.client in tests
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
The :ref:`internals_datasette_client` mechanism is designed for use in tests. It provides access to a pre-configured `HTTPX async client <https://www.python-httpx.org/async/>`__ instance that can make GET, POST and other HTTP requests against a Datasette instance from inside a test.
|
||||||
|
|
||||||
|
I simple test looks like this:
|
||||||
|
|
||||||
|
.. literalinclude:: ../tests/test_docs.py
|
||||||
|
:language: python
|
||||||
|
:start-after: # -- start test_homepage --
|
||||||
|
:end-before: # -- end test_homepage --
|
||||||
|
|
||||||
|
Or for a JSON API:
|
||||||
|
|
||||||
|
.. literalinclude:: ../tests/test_docs.py
|
||||||
|
:language: python
|
||||||
|
:start-after: # -- start test_actor_is_null --
|
||||||
|
:end-before: # -- end test_actor_is_null --
|
||||||
|
|
||||||
|
To make requests as an authenticated actor, create a signed ``ds_cookie`` using the ``datasette.client.actor_cookie()`` helper function and pass it in ``cookies=`` like this:
|
||||||
|
|
||||||
|
.. literalinclude:: ../tests/test_docs.py
|
||||||
|
:language: python
|
||||||
|
:start-after: # -- start test_signed_cookie_actor --
|
||||||
|
:end-before: # -- end test_signed_cookie_actor --
|
||||||
|
|
||||||
.. _testing_plugins_pdb:
|
.. _testing_plugins_pdb:
|
||||||
|
|
||||||
Using pdb for errors thrown inside Datasette
|
Using pdb for errors thrown inside Datasette
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
"""
|
"""
|
||||||
Tests to ensure certain things are documented.
|
Tests to ensure certain things are documented.
|
||||||
"""
|
"""
|
||||||
from click.testing import CliRunner
|
|
||||||
from datasette import app, utils
|
from datasette import app, utils
|
||||||
from datasette.cli import cli
|
from datasette.app import Datasette
|
||||||
from datasette.filters import Filters
|
from datasette.filters import Filters
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -102,3 +101,41 @@ def documented_fns():
|
||||||
@pytest.mark.parametrize("fn", utils.functions_marked_as_documented)
|
@pytest.mark.parametrize("fn", utils.functions_marked_as_documented)
|
||||||
def test_functions_marked_with_documented_are_documented(documented_fns, fn):
|
def test_functions_marked_with_documented_are_documented(documented_fns, fn):
|
||||||
assert fn.__name__ in documented_fns
|
assert fn.__name__ in documented_fns
|
||||||
|
|
||||||
|
|
||||||
|
# Tests for testing_plugins.rst documentation
|
||||||
|
|
||||||
|
|
||||||
|
# -- start test_homepage --
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_homepage():
|
||||||
|
ds = Datasette(memory=True)
|
||||||
|
response = await ds.client.get("/")
|
||||||
|
html = response.text
|
||||||
|
assert "<h1>" in html
|
||||||
|
|
||||||
|
|
||||||
|
# -- end test_homepage --
|
||||||
|
|
||||||
|
|
||||||
|
# -- start test_actor_is_null --
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_actor_is_null():
|
||||||
|
ds = Datasette(memory=True)
|
||||||
|
response = await ds.client.get("/-/actor.json")
|
||||||
|
assert response.json() == {"actor": None}
|
||||||
|
|
||||||
|
|
||||||
|
# -- end test_actor_is_null --
|
||||||
|
|
||||||
|
|
||||||
|
# -- start test_signed_cookie_actor --
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_signed_cookie_actor():
|
||||||
|
ds = Datasette(memory=True)
|
||||||
|
cookies = {"ds_actor": ds.client.actor_cookie({"id": "root"})}
|
||||||
|
response = await ds.client.get("/-/actor.json", cookies=cookies)
|
||||||
|
assert response.json() == {"actor": {"id": "root"}}
|
||||||
|
|
||||||
|
|
||||||
|
# -- end test_signed_cookie_actor --
|
||||||
|
|
Ładowanie…
Reference in New Issue