File: test_init.py

package info (click to toggle)
aiohttp-fast-url-dispatcher 0.3.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 368 kB
  • sloc: python: 159; makefile: 17; sh: 5
file content (123 lines) | stat: -rw-r--r-- 3,660 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import asyncio
from pathlib import Path
from unittest.mock import MagicMock

import pytest
from aiohttp import web
from yarl import URL

from aiohttp_fast_url_dispatcher import FastUrlDispatcher, attach_fast_url_dispatcher


def test_attach_fast_url_dispatcher() -> None:
    """Test attaching the fast url dispatcher to an app."""
    dispatcher = FastUrlDispatcher()
    app = web.Application()
    attach_fast_url_dispatcher(app, dispatcher)
    assert isinstance(app._router, FastUrlDispatcher)
    app = web.Application(router=dispatcher)
    assert isinstance(app._router, FastUrlDispatcher)


@pytest.mark.asyncio
async def test_dispatch(tmp_path: Path) -> None:
    """Test the FastUrlDispatcher."""
    dispatcher = FastUrlDispatcher()
    index_path = tmp_path.joinpath("index.html")
    index_path.write_text("Hello World!")
    dispatcher.add_static("/static", tmp_path, show_index=True)
    payload = MagicMock()
    protocol = MagicMock()

    url = URL("/static/index.html")
    message = MagicMock(url=url, method="GET")
    request = web.Request(
        message,
        payload,
        protocol=protocol,
        host="example.com",
        task=MagicMock(),
        loop=asyncio.get_running_loop(),
        payload_writer=MagicMock(),
    )
    assert request.rel_url == url
    match_info = await dispatcher.resolve(request)
    assert match_info is not None
    assert match_info.route.resource.canonical == "/static"

    url = URL("/static/index.html")
    message = MagicMock(url=url, method="WRONG")
    request = web.Request(
        message,
        payload,
        protocol=protocol,
        host="example.com",
        task=MagicMock(),
        loop=asyncio.get_running_loop(),
        payload_writer=MagicMock(),
    )
    assert request.rel_url == url
    match_info = await dispatcher.resolve(request)
    assert match_info is not None
    assert match_info.route.status == 405

    url = URL("/not_registered")
    message = MagicMock(url=url, method="GET")
    request = web.Request(
        message,
        payload,
        protocol=protocol,
        host="example.com",
        task=MagicMock(),
        loop=asyncio.get_running_loop(),
        payload_writer=MagicMock(),
    )
    assert request.rel_url == url
    match_info = await dispatcher.resolve(request)
    assert match_info is not None
    assert match_info.route.status == 404


@pytest.mark.asyncio
async def test_template_at_slash() -> None:
    """Test the FastUrlDispatcher with a template at /."""
    dispatcher = FastUrlDispatcher()

    async def handler():
        return web.Response(text="Hello World!")

    dispatcher.add_get(r"/{any}", handler)
    payload = MagicMock()
    protocol = MagicMock()

    url = URL("/wildcard")
    message = MagicMock(url=url, method="GET")
    request = web.Request(
        message,
        payload,
        protocol=protocol,
        host="example.com",
        task=MagicMock(),
        loop=asyncio.get_running_loop(),
        payload_writer=MagicMock(),
    )
    assert request.rel_url == url
    match_info = await dispatcher.resolve(request)
    assert match_info is not None
    assert match_info.route.resource.canonical == "/{any}"

    url = URL("/not/registered")
    message = MagicMock(url=url, method="GET")
    request = web.Request(
        message,
        payload,
        protocol=protocol,
        host="example.com",
        task=MagicMock(),
        loop=asyncio.get_running_loop(),
        payload_writer=MagicMock(),
    )
    assert request.rel_url == url
    match_info = await dispatcher.resolve(request)
    assert match_info is not None
    assert match_info.route.status == 404