aboutsummaryrefslogtreecommitdiffstats
path: root/tests/middleware/test_options.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/middleware/test_options.py')
-rw-r--r--tests/middleware/test_options.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/middleware/test_options.py b/tests/middleware/test_options.py
new file mode 100644
index 0000000..8cf48ea
--- /dev/null
+++ b/tests/middleware/test_options.py
@@ -0,0 +1,43 @@
+from wsgiref.validate import validator
+
+import pytest
+
+from paste import options
+
+from ..common_wsgi import call_app
+
+
+@pytest.fixture
+def app():
+ @validator
+ @options
+ @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"])
+def test_non_options(app, method):
+ environ = {"REQUEST_METHOD": method}
+ response = call_app(app, environ)
+ assert response.data == b"Hello, world!"
+ assert response.status == "200 OK"
+ assert ("Content-Type", "text/plain") in response.headers
+
+
+def test_options(app):
+ environ = {"REQUEST_METHOD": "OPTIONS"}
+ response = call_app(app, environ)
+ assert response.data == b""
+ assert response.status == "204 No Content"
+ allow = None
+ for k, v in response.headers:
+ if k != "Allow":
+ continue
+ allow = v.split(", ")
+ assert allow is not None, "Must contain an Allow header"
+ assert len(set(allow)) == len(allow), "Allow header must not contain duplicates"
+ assert set(allow) == {"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS"}