-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature/middleware-tests' into development
- Loading branch information
Showing
1 changed file
with
128 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
# Copyright (c) 2019 Brian Schubert | ||
# | ||
# This file is distributed under the MIT License. If a copy of the | ||
# MIT License was not distributed with this file, you can obtain one | ||
# at https://opensource.org/licenses/MIT. | ||
|
||
import unittest | ||
|
||
from django.http import HttpResponse | ||
from django.test import RequestFactory, override_settings | ||
from django_htcpcp_tea.middleware import HTCPCPTeaMiddleware | ||
|
||
from .utils import HTCPCP_COFFEE_CONTENT | ||
|
||
|
||
class MiddlewareTests(unittest.TestCase): | ||
|
||
def setUp(self): | ||
self.rf = RequestFactory() | ||
|
||
def test_validate_request_when_method_post(self): | ||
for condition in (True, False): | ||
with override_settings(HTCPCP_ALLOW_DEPRECATED_POST=condition): | ||
checker = self._make_assert_htcpcp_valid(is_valid=condition) | ||
# Check if POST request is considered to be valid HTCPCP | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data='start') | ||
HTCPCPTeaMiddleware(get_response=checker)(request) | ||
|
||
@override_settings(HTCPCP_STRICT_REQUEST_BODY=True) | ||
def test_with_strict_request_body(self): | ||
valid_data = ['start', 'stop'] | ||
invalid_data = ['please start', 'start stop', 'lemon'] | ||
|
||
checker = self._make_assert_htcpcp_valid(is_valid=True) | ||
middleware = HTCPCPTeaMiddleware(get_response=checker) | ||
for payload in valid_data: | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data=payload) | ||
middleware(request) | ||
|
||
checker = self._make_assert_htcpcp_valid(is_valid=False) | ||
middleware = HTCPCPTeaMiddleware(get_response=checker) | ||
for payload in invalid_data: | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data=payload) | ||
middleware(request) | ||
|
||
@override_settings(HTCPCP_STRICT_REQUEST_BODY=False) | ||
def test_with_nonstrict_request_body(self): | ||
valid_data = ['start', 'stop', 'please start', 'canyoustopnow'] | ||
invalid_data = ['lemon', 'Stop'] | ||
|
||
checker = self._make_assert_htcpcp_valid(is_valid=True) | ||
middleware = HTCPCPTeaMiddleware(get_response=checker) | ||
for payload in valid_data: | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data=payload) | ||
middleware(request) | ||
|
||
checker = self._make_assert_htcpcp_valid(is_valid=False) | ||
middleware = HTCPCPTeaMiddleware(get_response=checker) | ||
for payload in invalid_data: | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data=payload) | ||
middleware(request) | ||
|
||
@override_settings(HTCPCP_OVERRIDE_SERVER_NAME=True) | ||
def test_override_server_name_true(self): | ||
middleware = HTCPCPTeaMiddleware(lambda request: HttpResponse()) | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data='start') | ||
|
||
# Remove server software key if it exists | ||
request.META.pop('SERVER_SOFTWARE', None) | ||
|
||
self.assertEqual( | ||
middleware(request)['Server'], | ||
'HTCPCP-TEA Python', | ||
) | ||
|
||
request.META['SERVER_SOFTWARE'] = 'Squirrel With a Paintbrush' | ||
self.assertEqual( | ||
middleware(request)['Server'], | ||
'HTCPCP-TEA Squirrel With a Paintbrush', | ||
) | ||
|
||
def test_override_server_name_callable(self): | ||
middleware = HTCPCPTeaMiddleware(lambda request: HttpResponse()) | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data='start') | ||
|
||
def server_name(request, response): | ||
return "Server Name Callable" | ||
|
||
with override_settings(HTCPCP_OVERRIDE_SERVER_NAME=server_name): | ||
self.assertEqual( | ||
middleware(request)['Server'], | ||
'Server Name Callable', | ||
) | ||
|
||
def test_override_server_name_string(self): | ||
middleware = HTCPCPTeaMiddleware(lambda request: HttpResponse()) | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data='start') | ||
|
||
request.META['SQUIRREL_TAIL_COLOR'] = 'Acorn Brown' | ||
fmt = 'Squirrel with a {SQUIRREL_TAIL_COLOR} tail' | ||
|
||
with override_settings(HTCPCP_OVERRIDE_SERVER_NAME=fmt): | ||
self.assertEqual( | ||
middleware(request)['Server'], | ||
'Squirrel with a Acorn Brown tail', | ||
) | ||
|
||
def test_override_server_name_false(self): | ||
def get_response(request): | ||
response = HttpResponse() | ||
response['Server'] = 'Normal Server Name' | ||
return response | ||
|
||
middleware = HTCPCPTeaMiddleware(get_response=get_response) | ||
request = self.rf.post('/', content_type=HTCPCP_COFFEE_CONTENT, data='start') | ||
|
||
with override_settings(HTCPCP_OVERRIDE_SERVER_NAME=False): | ||
self.assertEqual( | ||
middleware(request)['Server'], | ||
'Normal Server Name', | ||
) | ||
|
||
def _make_assert_htcpcp_valid(self, is_valid=True): | ||
def _assert_htcpcp_valid(request): | ||
self.assertEqual(request.htcpcp_valid, is_valid) | ||
return HttpResponse() | ||
|
||
return _assert_htcpcp_valid |