Exemplo n.º 1
0
def test_router_match_with_trailing_slash():
    router = Router()

    def get_foo():
        ...

    def create_foo():
        ...

    router.add_get("/foo", get_foo)
    router.add_post("/foo", create_foo)

    m = router.get_match(HttpMethod.GET, b"/foo/")

    assert m is not None
    assert m.handler is get_foo

    m = router.get_match(HttpMethod.POST, b"/foo/")

    assert m is not None
    assert m.handler is create_foo

    m = router.get_match(HttpMethod.POST, b"/foo//")

    assert m is None
Exemplo n.º 2
0
def test_more_than_one_star_raises():
    router = Router()

    def home():
        ...

    with pytest.raises(ValueError):
        router.add_get("*/*", home)
Exemplo n.º 3
0
def test_more_than_one_star_raises():
    router = Router()

    def home():
        ...

    with pytest.raises(RouteException):
        router.add_get("*/*", home)
Exemplo n.º 4
0
    def test_router_match_any_below(self):
        router = Router()

        def a():
            pass

        def b():
            pass

        def c():
            pass

        def d():
            pass

        router.add_get(b'/a/*', a)
        router.add_get(b'/b/*', b)
        router.add_get(b'/c/*', c)
        router.add_get(b'/d/*', d)

        m = router.get_match(HttpMethod.GET, b'/a')
        assert m is None

        m = router.get_match(HttpMethod.GET, b'/a/anything/really')
        assert m is not None
        assert m.handler is a
        assert m.values.get('tail') == 'anything/really'

        m = router.get_match(HttpMethod.GET, b'/b/anything/really')
        assert m is not None
        assert m.handler is b
        assert m.values.get('tail') == 'anything/really'

        m = router.get_match(HttpMethod.GET, b'/c/anything/really')
        assert m is not None
        assert m.handler is c
        assert m.values.get('tail') == 'anything/really'

        m = router.get_match(HttpMethod.GET, b'/d/anything/really')
        assert m is not None
        assert m.handler is d
        assert m.values.get('tail') == 'anything/really'

        m = router.get_match(HttpMethod.POST, b'/a/anything/really')
        assert m is None

        m = router.get_match(HttpMethod.POST, b'/b/anything/really')
        assert m is None

        m = router.get_match(HttpMethod.POST, b'/c/anything/really')
        assert m is None

        m = router.get_match(HttpMethod.POST, b'/d/anything/really')
        assert m is None
Exemplo n.º 5
0
def test_duplicate_pattern_star_raises():
    router = Router()

    def home(): ...

    def another(): ...

    router.add_get(b'*', home)

    with pytest.raises(RouteDuplicate):
        router.add_get(b'*', another)
Exemplo n.º 6
0
def test_duplicate_pattern_raises(first_route, second_route):
    router = Router()

    def home(): ...

    def another(): ...

    router.add_get(first_route, home)

    with pytest.raises(RouteDuplicate):
        router.add_get(second_route, another)
Exemplo n.º 7
0
    def test_duplicate_pattern_raises(self):
        router = Router()

        def home():
            pass

        def another():
            pass

        router.add_get(b'/', home)

        with pytest.raises(RouteDuplicate):
            router.add_get(b'/', another)
Exemplo n.º 8
0
    def test_router_match_among_many(self):
        router = Router()

        def home():
            pass

        def get_foo():
            pass

        def create_foo():
            pass

        def delete_foo():
            pass

        router.add_get(b'/', home)
        router.add_get(b'/foo', get_foo)
        router.add_post(b'/foo', create_foo)
        router.add_delete(b'/foo', delete_foo)

        m = router.get_match(HttpMethod.GET, b'/')

        assert m is not None
        assert m.handler is home

        m = router.get_match(HttpMethod.POST, b'/')

        assert m is None

        m = router.get_match(HttpMethod.GET, b'/foo')

        assert m is not None
        assert m.handler is get_foo

        m = router.get_match(HttpMethod.POST, b'/foo')

        assert m is not None
        assert m.handler is create_foo

        m = router.get_match(HttpMethod.DELETE, b'/foo')

        assert m is not None
        assert m.handler is delete_foo
Exemplo n.º 9
0
def test_router_match_any_by_extension():
    router = Router()

    def a(): ...

    def b(): ...

    router.add_get(b'/a/*.js', a)
    router.add_get(b'/b/*.css', b)

    m = router.get_match(HttpMethod.GET, b'/a/anything/really')
    assert m is None

    m = router.get_match(HttpMethod.GET, b'/a/anything/really.js')
    assert m is not None
    assert m.handler is a
    assert m.values.get('tail') == 'anything/really'

    m = router.get_match(HttpMethod.GET, b'/b/anything/really.css')
    assert m is not None
    assert m.handler is b
    assert m.values.get('tail') == 'anything/really'
Exemplo n.º 10
0
def test_router_match_any_by_extension():
    router = Router()

    def a():
        ...

    def b():
        ...

    router.add_get("/a/*.js", a)
    router.add_get("/b/*.css", b)

    m = router.get_match(HttpMethod.GET, b"/a/anything/really")
    assert m is None

    m = router.get_match(HttpMethod.GET, b"/a/anything/really.js")
    assert m is not None
    assert m.handler is a
    assert m.values.get("tail") == "anything/really"

    m = router.get_match(HttpMethod.GET, b"/b/anything/really.css")
    assert m is not None
    assert m.handler is b
    assert m.values.get("tail") == "anything/really"
Exemplo n.º 11
0
def test_router_match_among_many():
    router = Router()

    def home():
        ...

    def home_verbose():
        ...

    def home_options():
        ...

    def home_connect():
        ...

    def get_foo():
        ...

    def create_foo():
        ...

    def patch_foo():
        ...

    def delete_foo():
        ...

    router.add_trace("/", home_verbose)
    router.add_options("/", home_options)
    router.add_connect("/", home_connect)
    router.add_get("/", home)
    router.add_get("/foo", get_foo)
    router.add_patch("/foo", patch_foo)
    router.add_post("/foo", create_foo)
    router.add_delete("/foo", delete_foo)

    m = router.get_match(HttpMethod.GET, b"/")
    assert m is not None
    assert m.handler is home

    m = router.get_match(HttpMethod.TRACE, b"/")
    assert m is not None
    assert m.handler is home_verbose

    m = router.get_match(HttpMethod.CONNECT, b"/")
    assert m is not None
    assert m.handler is home_connect

    m = router.get_match(HttpMethod.OPTIONS, b"/")
    assert m is not None
    assert m.handler is home_options

    m = router.get_match(HttpMethod.POST, b"/")
    assert m is None

    m = router.get_match(HttpMethod.GET, b"/foo")
    assert m is not None
    assert m.handler is get_foo

    m = router.get_match(HttpMethod.POST, b"/foo")
    assert m is not None
    assert m.handler is create_foo

    m = router.get_match(HttpMethod.PATCH, b"/foo")
    assert m is not None
    assert m.handler is patch_foo

    m = router.get_match(HttpMethod.DELETE, b"/foo")
    assert m is not None
    assert m.handler is delete_foo
Exemplo n.º 12
0
def test_router_match_any_below():
    router = Router()

    def a():
        ...

    def b():
        ...

    def c():
        ...

    def d():
        ...

    router.add_get("/a/*", a)
    router.add_get("/b/*", b)
    router.add_get("/c/*", c)
    router.add_get("/d/*", d)

    m = router.get_match(HttpMethod.GET, b"/a")
    assert m is not None
    assert m.handler is a
    assert m.values.get("tail") == ""

    m = router.get_match(HttpMethod.GET, b"/a/")
    assert m is not None
    assert m.handler is a
    assert m.values.get("tail") == ""

    m = router.get_match(HttpMethod.GET, b"/a/anything/really")
    assert m is not None
    assert m.handler is a
    assert m.values.get("tail") == "anything/really"

    m = router.get_match(HttpMethod.GET, b"/b/anything/really")
    assert m is not None
    assert m.handler is b
    assert m.values.get("tail") == "anything/really"

    m = router.get_match(HttpMethod.GET, b"/c/anything/really")
    assert m is not None
    assert m.handler is c
    assert m.values.get("tail") == "anything/really"

    m = router.get_match(HttpMethod.GET, b"/d/anything/really")
    assert m is not None
    assert m.handler is d
    assert m.values.get("tail") == "anything/really"

    m = router.get_match(HttpMethod.POST, b"/a/anything/really")
    assert m is None

    m = router.get_match(HttpMethod.POST, b"/b/anything/really")
    assert m is None

    m = router.get_match(HttpMethod.POST, b"/c/anything/really")
    assert m is None

    m = router.get_match(HttpMethod.POST, b"/d/anything/really")
    assert m is None