add tests to cover new middleware

This commit is contained in:
Joe Kaufeld 2024-10-30 00:15:32 -04:00
parent b9ad2467df
commit f4ffa14b00
2 changed files with 68 additions and 3 deletions

View file

@ -23,8 +23,9 @@ from spiderweb.tests.views_for_tests import (
form_csrf_exempt, form_csrf_exempt,
form_view_without_csrf, form_view_without_csrf,
text_view, text_view,
unauthorized_view, unauthorized_view, file_view,
) )
from spiderweb.middleware.gzip import GzipMiddleware, CheckValidGzipMinimumLength, CheckValidGzipCompressionLevel
def index(request): def index(request):
@ -349,6 +350,67 @@ def test_unused_post_process_middleware():
assert len(app.middleware) == 0 assert len(app.middleware) == 0
class TestGzipMiddleware:
middleware = {"middleware": ["spiderweb.middleware.gzip.GzipMiddleware"]}
def test_not_enabled_on_small_response(self):
app, environ, start_response = setup(
**self.middleware,
gzip_minimum_response_length=500,
)
app.add_route("/", text_view)
environ["HTTP_USER_AGENT"] = "hi"
environ["REMOTE_ADDR"] = "/"
environ["REQUEST_METHOD"] = "GET"
assert app(environ, start_response) == [bytes("Hi!", DEFAULT_ENCODING)]
assert "Content-Encoding" not in start_response.get_headers()
def test_changing_minimum_response_length(self):
app, environ, start_response = setup(
**self.middleware,
gzip_minimum_response_length=1,
)
app.add_route("/", text_view)
environ["HTTP_ACCEPT_ENCODING"] = "gzip"
environ["HTTP_USER_AGENT"] = "hi"
environ["REMOTE_ADDR"] = "/"
environ["REQUEST_METHOD"] = "GET"
assert str(app(environ, start_response)[0]).startswith("b'\\x1f\\x8b\\x08")
assert "content-encoding" in start_response.get_headers()
def test_not_enabled_on_error_response(self):
app, environ, start_response = setup(
**self.middleware,
gzip_minimum_response_length=1,
)
app.add_route("/", unauthorized_view)
environ["HTTP_ACCEPT_ENCODING"] = "gzip"
environ["HTTP_USER_AGENT"] = "hi"
environ["REMOTE_ADDR"] = "/"
environ["REQUEST_METHOD"] = "GET"
assert app(environ, start_response) == [bytes("Unauthorized", DEFAULT_ENCODING)]
assert "content-encoding" not in start_response.get_headers()
def test_not_enabled_on_bytes_response(self):
app, environ, start_response = setup(
**self.middleware,
gzip_minimum_response_length=1,
)
# send a file that's already in bytes form
app.add_route("/", file_view)
environ["HTTP_ACCEPT_ENCODING"] = "gzip"
environ["HTTP_USER_AGENT"] = "hi"
environ["REMOTE_ADDR"] = "/"
environ["REQUEST_METHOD"] = "GET"
assert app(environ, start_response) == [bytes("hi", DEFAULT_ENCODING)]
assert "content-encoding" not in start_response.get_headers()
class TestCorsMiddleware: class TestCorsMiddleware:
# adapted from: # adapted from:
# https://github.com/adamchainz/django-cors-headers/blob/main/tests/test_middleware.py # https://github.com/adamchainz/django-cors-headers/blob/main/tests/test_middleware.py

View file

@ -1,7 +1,6 @@
from spiderweb import HttpResponse from spiderweb import HttpResponse
from spiderweb.decorators import csrf_exempt from spiderweb.decorators import csrf_exempt
from spiderweb.response import JsonResponse, TemplateResponse from spiderweb.response import JsonResponse, TemplateResponse, FileResponse
EXAMPLE_HTML_FORM = """ EXAMPLE_HTML_FORM = """
<form action="" method="post"> <form action="" method="post">
@ -47,3 +46,7 @@ def text_view(request):
def unauthorized_view(request): def unauthorized_view(request):
return HttpResponse("Unauthorized", status_code=401) return HttpResponse("Unauthorized", status_code=401)
def file_view(request):
return FileResponse("spiderweb/tests/staticfiles/file_for_testing_fileresponse.txt")