aboutsummaryrefslogtreecommitdiffstats
path: root/tests/middleware/test_validate_method.py
blob: 1a51bca633666f64e710cfc14fdb7d5b8d601885 (plain)
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
from wsgiref.validate import validator

import pytest

from paste import validate_method

from ..common_wsgi import call_app


@pytest.fixture
def app():
    @validator
    @validate_method
    @validator
    def app(_, start_response):
        start_response("200 OK", [("Content-type", "text/plain")])
        return [b"Hello, world!"]

    return app


@pytest.mark.parametrize("method", ["GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS"])
def test_valid_method(app, method):
    environ = {"REQUEST_METHOD": method}
    response = call_app(app, environ)
    assert response.status == "200 OK"
    assert response.data == b"Hello, world!"


@pytest.mark.filterwarnings("ignore:Unknown REQUEST_METHOD")
@pytest.mark.parametrize("method", ["CONNECT", "PATCH", "TRACE"])
def test_disallowed_method(app, method):
    environ = {"REQUEST_METHOD": method}
    response = call_app(app, environ)
    assert response.status == "405 Method Not Allowed"
    assert response.data == b"405 Method Not Allowed\n"


@pytest.mark.filterwarnings("ignore:Unknown REQUEST_METHOD")
def test_invalid_method(app):
    environ = {"REQUEST_METHOD": "INVALID"}
    response = call_app(app, environ)
    assert response.status == "501 Not Implemented"
    assert response.data == b"501 Not Implemented\n"