42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
from django.http import HttpResponse
|
|
from django.test import RequestFactory, SimpleTestCase
|
|
from django.utils import timezone
|
|
|
|
from core.middleware import TimezoneMiddleware
|
|
|
|
|
|
class TimezoneMiddlewareTest(SimpleTestCase):
|
|
|
|
def setUp(self):
|
|
self.factory = RequestFactory()
|
|
self.middleware = TimezoneMiddleware(lambda r: HttpResponse())
|
|
|
|
def test_activates_valid_timezone_from_cookie(self):
|
|
captured = {}
|
|
|
|
def get_response(request):
|
|
captured["tz"] = str(timezone.get_current_timezone())
|
|
return HttpResponse()
|
|
|
|
middleware = TimezoneMiddleware(get_response)
|
|
request = self.factory.get("/")
|
|
request.COOKIES["user_tz"] = "America/New_York"
|
|
middleware(request)
|
|
self.assertEqual(captured["tz"], "America/New_York")
|
|
|
|
def test_deactivates_after_response(self):
|
|
# Timezone activation must not leak into subsequent requests
|
|
request = self.factory.get("/")
|
|
request.COOKIES["user_tz"] = "America/New_York"
|
|
self.middleware(request)
|
|
self.assertEqual(str(timezone.get_current_timezone()), "UTC")
|
|
|
|
def test_invalid_timezone_cookie_does_not_raise(self):
|
|
request = self.factory.get("/")
|
|
request.COOKIES["user_tz"] = "Not/ATimezone"
|
|
self.middleware(request) # must not raise
|
|
|
|
def test_missing_cookie_does_not_raise(self):
|
|
request = self.factory.get("/")
|
|
self.middleware(request) # must not raise
|