예제 #1
0
async def _(api: Api, view: type[RequestHandlerProtocol]):
    path = api.url_for(view)
    async with api.client() as client:
        response = await client.get(path, timeout=2)
        assert response.status_code == HTTPStatus.OK
        expected_str = "".join([f"count {i}\n" for i in range(10)])
        assert response.text == expected_str
예제 #2
0
async def _(api: Api, bp: Blueprint, hook: type[RequestHandlerProtocol]):
    api.add_blueprint("", bp)
    async with api.client() as client:
        response = await client.get("/")
        assert response.status_code == HTTPStatus.OK
        hook_view = api._view_cache[hook]
        hook_view.mock.assert_called_once()
예제 #3
0
async def _(api: Api, ws: type[RequestHandlerProtocol]):
    path = api.url_for(ws)
    async with api.client() as client:
        async with client.ws_connect(path, queries=params) as connection:
            resp = await connection.receive(str)
            assert resp == "bye"
            await connection.send("FOO")
예제 #4
0
async def _(api: Api, view: type[RequestHandlerProtocol]):
    path = api.url_for(view)
    async with api.client() as client:
        response = await client.get(path)
        assert response.status_code == 418
        response = await client.get(path, allow_redirects=False)
        assert response.status_code == HTTPStatus.TEMPORARY_REDIRECT
예제 #5
0
async def _(api: Api, view: type[RequestHandlerProtocol]):
    path = api.url_for(view)
    async with api.client() as client:
        response = await client.get(path)
        assert response.status_code == HTTPStatus.OK
        headers = response.headers
        assert headers["authorization"] == "Test dummy"
        assert headers.get_list("foo") == ["baz", "spam"]
예제 #6
0
async def _(api: Api, store: type[AnyComponentProtocol]):
    async with api.client():
        store_instance = use_component(store, api=api)
        assert isinstance(store_instance, store)
        store_instance._startup.assert_called_once()
        store_instance._shutdown.assert_not_called()

    store_instance._shutdown.assert_called_once()
예제 #7
0
async def _(api: Api, view: type[RequestHandlerProtocol]):
    path = api.url_for(view)
    async with api.client() as client:
        response = await client.get(path)
        assert response.status_code == HTTPStatus.OK
        assert response.cookies["foo"] == "bar"
        assert response.cookies["spam"] == "baz"
        assert "willbe" not in response.cookies
예제 #8
0
async def _(api: Api, bp: Blueprint, path_code: tuple[str, int]):
    api.routing = "clone"
    api.add_blueprint("/", bp)
    api.add_blueprint("start", bp)
    async with api.client() as client:
        path, code = path_code
        response = await client.get(path, allow_redirects=False)
        assert response.status_code == code
예제 #9
0
async def _(
    api: Api,
    path: str,
    code: int,
    _: type[RequestHandlerProtocol],
):
    async with api.client() as client:
        response = await client.get(path)
        assert response.status_code == code
예제 #10
0
async def _(api: Api) -> None:
    async with api.client() as client:
        resp = await client.get("/root-app/root-component")
        assert resp.status_code == HTTPStatus.OK
        resp = await client.get("/root-app/mounted-component")
        assert resp.status_code == HTTPStatus.NOT_FOUND
        resp = await client.get("/mounted-app/mounted-component")
        assert resp.status_code == HTTPStatus.OK
        resp = await client.get("/mounted-app/root-component")
        assert resp.status_code == HTTPStatus.NOT_FOUND
예제 #11
0
async def _(api: Api, view: type[RequestHandlerProtocol]):
    path = api.url_for(view)
    data = {
        "foo": "bar",
        "num": "42",
        "file": ("file.bin", b"abcde" * 1000 ** 2, "application/octet-stream"),
    }
    api.max_upload_bytes = 1 * 1000 ** 2
    async with api.client() as client:
        response = await client.post(path, files=data)
        assert response.status_code == HTTPStatus.REQUEST_ENTITY_TOO_LARGE
예제 #12
0
async def _(api: Api, bp: Blueprint, path_code: tuple[str, int]):
    api.routing = "no_slash"
    api.add_blueprint("/", bp)
    api.add_blueprint("start", bp)
    async with api.client() as client:
        path, code = path_code
        response = await client.get(path, allow_redirects=False)
        assert response.status_code == code
        if response.status_code == HTTPStatus.PERMANENT_REDIRECT:
            location = response.headers["location"]
            assert location == path[:-1]
예제 #13
0
async def _(
    api: Api,
    bp: Blueprint,
    view: type[RequestHandlerProtocol],
    params: dict,
):
    api.add_blueprint("", bp)
    path = api.url_for(view, params)
    async with api.client() as client:
        with raises(NotFoundError):
            await client.get(path)
예제 #14
0
async def _(api: Api, bp: Blueprint):
    child_bp = Blueprint()

    @child_bp.route("/child")
    class Child:
        pass

    bp.add_blueprint("/and", child_bp)
    api.add_blueprint("/parent", bp)
    async with api.client() as client:
        response = await client.get("/parent/and/child")
        assert response.status_code == HTTPStatus.OK
예제 #15
0
async def _(api: Api):
    async with api.client() as client:
        resp = await client.get("/bar", allow_redirects=False)
        assert resp.status_code == HTTPStatus.PERMANENT_REDIRECT
        assert resp.headers["location"] == "/bar/"
        resp = await client.get("/foo", allow_redirects=False)
        assert resp.status_code == HTTPStatus.OK
        resp = await client.get("/baz/", allow_redirects=False)
        assert resp.status_code == HTTPStatus.PERMANENT_REDIRECT
        assert resp.headers["location"] == "/baz"
        resp = await client.post("/bar", allow_redirects=False)
        assert resp.status_code == HTTPStatus.PERMANENT_REDIRECT
예제 #16
0
async def _(
    api: Api,
    bp: Blueprint,
    view: type[RequestHandlerProtocol],
    params: dict,
):
    api.add_blueprint("", bp)
    path = api.url_for(view, params)
    async with api.client() as client:
        response = await client.get(path)
        assert response.status_code == HTTPStatus.OK
        assert response.json["number"] == params["number"]
        assert response.json["name"] == params["name"].upper()
예제 #17
0
async def _(api: Api):
    @api.route("/")
    class Index:
        allowed_methods = ["post"]

    async with api.client() as client:
        response = await client.post("/")
        assert response.status_code == HTTPStatus.OK
        response = await client.put("/")
        assert response.status_code == HTTPStatus.METHOD_NOT_ALLOWED
        allowed = response.headers["allow"]
        assert "POST" in allowed
        assert "GET" in allowed
예제 #18
0
async def _(api: Api, ws: type[RequestHandlerProtocol],
            handler: type[ErrorHandlerProtocol]):
    path = api.url_for(ws)
    async with api.client() as client:
        async with client.ws_connect(path) as conn:
            await conn.send("FOO")
            resp = await conn.receive(str)
            assert resp == "hello, FOO!"
            await conn.send("end")
            resp = await conn.receive(str)
            assert resp == "error!"
            resp = await conn.receive(str)
            assert resp == "GOT ERROR"
예제 #19
0
async def _(
    api: Api,
    handler: ErrorHandler,
    errors: dict[str, tuple[type[Exception], int]],
    view: type[RequestHandlerProtocol],
):
    api.add_error_handler(handler)
    async with api.client() as client:
        for k, v in errors.items():
            response = await client.get(f"/{k}")
            assert response.text == k
            assert response.status_code == v[1]

        with raises(KeyError):
            response = await client.get("/NotHandled")
예제 #20
0
async def _(api: Api, ws: type[RequestHandlerProtocol]):
    path = api.url_for(ws)
    async with api.client() as client:
        async with client.ws_connect(path) as conn:
            await conn.send(b"FOO")
            resp = await conn.receive(bytes)
            assert resp == b"hello, FOO!"
            await conn.send(b"BAR")
            resp = await conn.receive(bytes)
            assert resp == b"hello, BAR!"
            await conn.send(b"end")
            resp = await conn.receive(bytes)
            assert resp == b"bye"
            await conn.send(b"FOO")
            with raises(RuntimeError):
                await conn.receive(bytes)
예제 #21
0
async def _(
    api: Api,
    after: type[RequestHandlerProtocol],
    before: type[RequestHandlerProtocol],
    index: type[RequestHandlerProtocol],
):
    with raises(KeyError):
        # not cached means not called.
        api._view_cache[before]
    with raises(KeyError):
        api._view_cache[after]
    async with api.client() as client:
        path = api.url_for(index)
        response = await client.get(path)
        assert response.status_code == HTTPStatus.OK
        after_instance = api._view_cache[after]
        after_instance.mock.assert_called_once()
예제 #22
0
async def _(api: Api, view: type[RequestHandlerProtocol], query: tuple[str, dict]):
    path = api.url_for(view, {"path": query[0]})
    async with api.client() as client:
        response = await client.get(path, queries=query[1])
        assert response.status_code == HTTPStatus.OK
예제 #23
0
async def _(api: Api, timeout: type[RequestHandlerProtocol]):
    async with api.client() as client:
        with raises(asyncio.TimeoutError):
            await client.get("/timeout", timeout=0.001)
예제 #24
0
async def _(api: Api, view: type[RequestHandlerProtocol], cookies: dict[str, str]):
    path = api.url_for(view)
    async with api.client() as client:
        response = await client.get(path, cookies=cookies)
        assert response.status_code == HTTPStatus.OK
예제 #25
0
async def _(api: Api, view: type[RequestHandlerProtocol]):
    path = api.url_for(view)
    async with api.client() as cilent:
        response = await cilent.get(path)
        assert response.status_code == HTTPStatus.OK
        assert response.content == b"send some bytes"
예제 #26
0
async def _(api: Api, bp: Blueprint, startup: MagicMock, shutdown: MagicMock):
    api.add_blueprint("", bp)
    async with api.client():
        startup.assert_called_once()
        shutdown.assert_not_called()
    shutdown.assert_called_once()
예제 #27
0
async def _(api: Api, bp: Blueprint):
    api.add_blueprint("", bp)
    async with api.client() as client:
        response = await client.get("/not/defined")
        assert response.status_code == 418
예제 #28
0
async def _(api: Api, view: type[RequestHandlerProtocol], data: dict):
    path = api.url_for(view)
    async with api.client() as client:
        response = await client.get(path)
        assert response.status_code == HTTPStatus.OK
        assert dict(**response.json) == data
예제 #29
0
async def _(api: Api, bp: Blueprint, view: type[RequestHandlerProtocol],
            params: dict):
    path = api.url_for(view, params)
    async with api.client() as client:
        response = await client.get(path)
        assert response.json == params
예제 #30
0
async def _(api: Api, view: type[RequestHandlerProtocol], name: str):
    path = api.url_for(view)
    async with api.client() as client:
        response = await client.post(path, content=name.encode("utf8"))
        assert response.status_code == HTTPStatus.OK
        assert escape(name) in response.text