summaryrefslogtreecommitdiff
path: root/tests/responses
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2018-01-08 11:24:26 -0500
committerTim Graham <timograham@gmail.com>2018-01-08 12:01:59 -0500
commit8e94f9f7dd515e49621b4a8395077a0cd2ab4c78 (patch)
treed5495fccdcbf359b3278615e2a3af763707477c2 /tests/responses
parent7c81b28ebcaebbc2e5bbca9a73427d81166ce3dc (diff)
downloaddjango-8e94f9f7dd515e49621b4a8395077a0cd2ab4c78.tar.gz
Moved HttpResponse.set_cookie() tests to an appropriate location.
Diffstat (limited to 'tests/responses')
-rw-r--r--tests/responses/test_cookie.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/responses/test_cookie.py b/tests/responses/test_cookie.py
new file mode 100644
index 0000000000..cbd65926c0
--- /dev/null
+++ b/tests/responses/test_cookie.py
@@ -0,0 +1,93 @@
+import time
+from datetime import datetime, timedelta
+from http import cookies
+
+from django.http import HttpResponse
+from django.test import SimpleTestCase
+from django.test.utils import freeze_time
+from django.utils.http import http_date
+from django.utils.timezone import utc
+
+
+class SetCookieTests(SimpleTestCase):
+
+ def test_near_expiration(self):
+ """Cookie will expire when a near expiration time is provided."""
+ response = HttpResponse()
+ # There's a timing weakness in this test; The expected result for
+ # max-age requires that there be a very slight difference between the
+ # evaluated expiration time and the time evaluated in set_cookie(). If
+ # this difference doesn't exist, the cookie time will be 1 second
+ # larger. The sleep guarantees that there will be a time difference.
+ expires = datetime.utcnow() + timedelta(seconds=10)
+ time.sleep(0.001)
+ response.set_cookie('datetime', expires=expires)
+ datetime_cookie = response.cookies['datetime']
+ self.assertEqual(datetime_cookie['max-age'], 10)
+
+ def test_aware_expiration(self):
+ """set_cookie() accepts an aware datetime as expiration time."""
+ response = HttpResponse()
+ expires = (datetime.utcnow() + timedelta(seconds=10)).replace(tzinfo=utc)
+ time.sleep(0.001)
+ response.set_cookie('datetime', expires=expires)
+ datetime_cookie = response.cookies['datetime']
+ self.assertEqual(datetime_cookie['max-age'], 10)
+
+ def test_create_cookie_after_deleting_cookie(self):
+ """Setting a cookie after deletion clears the expiry date."""
+ response = HttpResponse()
+ response.set_cookie('c', 'old-value')
+ self.assertEqual(response.cookies['c']['expires'], '')
+ response.delete_cookie('c')
+ self.assertEqual(response.cookies['c']['expires'], 'Thu, 01 Jan 1970 00:00:00 GMT')
+ response.set_cookie('c', 'new-value')
+ self.assertEqual(response.cookies['c']['expires'], '')
+
+ def test_far_expiration(self):
+ """Cookie will expire when a distant expiration time is provided."""
+ response = HttpResponse()
+ response.set_cookie('datetime', expires=datetime(2028, 1, 1, 4, 5, 6))
+ datetime_cookie = response.cookies['datetime']
+ self.assertIn(
+ datetime_cookie['expires'],
+ # assertIn accounts for slight time dependency (#23450)
+ ('Sat, 01 Jan 2028 04:05:06 GMT', 'Sat, 01 Jan 2028 04:05:07 GMT')
+ )
+
+ def test_max_age_expiration(self):
+ """Cookie will expire if max_age is provided."""
+ response = HttpResponse()
+ set_cookie_time = time.time()
+ with freeze_time(set_cookie_time):
+ response.set_cookie('max_age', max_age=10)
+ max_age_cookie = response.cookies['max_age']
+ self.assertEqual(max_age_cookie['max-age'], 10)
+ self.assertEqual(max_age_cookie['expires'], http_date(set_cookie_time + 10))
+
+ def test_httponly_cookie(self):
+ response = HttpResponse()
+ response.set_cookie('example', httponly=True)
+ example_cookie = response.cookies['example']
+ self.assertIn('; %s' % cookies.Morsel._reserved['httponly'], str(example_cookie))
+ self.assertIs(example_cookie['httponly'], True)
+
+ def test_unicode_cookie(self):
+ """HttpResponse.set_cookie() works with unicode data."""
+ response = HttpResponse()
+ cookie_value = '清風'
+ response.set_cookie('test', cookie_value)
+ self.assertEqual(response.cookies['test'].value, cookie_value)
+
+
+class DeleteCookieTests(SimpleTestCase):
+
+ def test_default(self):
+ response = HttpResponse()
+ response.delete_cookie('c')
+ cookie = response.cookies['c']
+ self.assertEqual(cookie['expires'], 'Thu, 01 Jan 1970 00:00:00 GMT')
+ self.assertEqual(cookie['max-age'], 0)
+ self.assertEqual(cookie['path'], '/')
+ self.assertEqual(cookie['secure'], '')
+ self.assertEqual(cookie['domain'], '')