summaryrefslogtreecommitdiff
path: root/tests/requests_tests/test_accept_header.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/requests_tests/test_accept_header.py')
-rw-r--r--tests/requests_tests/test_accept_header.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/requests_tests/test_accept_header.py b/tests/requests_tests/test_accept_header.py
new file mode 100644
index 0000000000..c6eed0e479
--- /dev/null
+++ b/tests/requests_tests/test_accept_header.py
@@ -0,0 +1,103 @@
+from unittest import TestCase
+
+from django.http import HttpRequest
+from django.http.request import MediaType
+
+
+class MediaTypeTests(TestCase):
+ def test_empty(self):
+ for empty_media_type in (None, ""):
+ with self.subTest(media_type=empty_media_type):
+ media_type = MediaType(empty_media_type)
+ self.assertIs(media_type.is_all_types, False)
+ self.assertEqual(str(media_type), "")
+ self.assertEqual(repr(media_type), "<MediaType: >")
+
+ def test_str(self):
+ self.assertEqual(str(MediaType("*/*; q=0.8")), "*/*; q=0.8")
+ self.assertEqual(str(MediaType("application/xml")), "application/xml")
+
+ def test_repr(self):
+ self.assertEqual(repr(MediaType("*/*; q=0.8")), "<MediaType: */*; q=0.8>")
+ self.assertEqual(
+ repr(MediaType("application/xml")),
+ "<MediaType: application/xml>",
+ )
+
+ def test_is_all_types(self):
+ self.assertIs(MediaType("*/*").is_all_types, True)
+ self.assertIs(MediaType("*/*; q=0.8").is_all_types, True)
+ self.assertIs(MediaType("text/*").is_all_types, False)
+ self.assertIs(MediaType("application/xml").is_all_types, False)
+
+ def test_match(self):
+ tests = [
+ ("*/*; q=0.8", "*/*"),
+ ("*/*", "application/json"),
+ (" */* ", "application/json"),
+ ("application/*", "application/json"),
+ ("application/xml", "application/xml"),
+ (" application/xml ", "application/xml"),
+ ("application/xml", " application/xml "),
+ ]
+ for accepted_type, mime_type in tests:
+ with self.subTest(accepted_type, mime_type=mime_type):
+ self.assertIs(MediaType(accepted_type).match(mime_type), True)
+
+ def test_no_match(self):
+ tests = [
+ (None, "*/*"),
+ ("", "*/*"),
+ ("; q=0.8", "*/*"),
+ ("application/xml", "application/html"),
+ ("application/xml", "*/*"),
+ ]
+ for accepted_type, mime_type in tests:
+ with self.subTest(accepted_type, mime_type=mime_type):
+ self.assertIs(MediaType(accepted_type).match(mime_type), False)
+
+
+class AcceptHeaderTests(TestCase):
+ def test_no_headers(self):
+ """Absence of Accept header defaults to '*/*'."""
+ request = HttpRequest()
+ self.assertEqual(
+ [str(accepted_type) for accepted_type in request.accepted_types],
+ ["*/*"],
+ )
+
+ def test_accept_headers(self):
+ request = HttpRequest()
+ request.META[
+ "HTTP_ACCEPT"
+ ] = "text/html, application/xhtml+xml,application/xml ;q=0.9,*/*;q=0.8"
+ self.assertEqual(
+ [str(accepted_type) for accepted_type in request.accepted_types],
+ [
+ "text/html",
+ "application/xhtml+xml",
+ "application/xml; q=0.9",
+ "*/*; q=0.8",
+ ],
+ )
+
+ def test_request_accepts_any(self):
+ request = HttpRequest()
+ request.META["HTTP_ACCEPT"] = "*/*"
+ self.assertIs(request.accepts("application/json"), True)
+
+ def test_request_accepts_none(self):
+ request = HttpRequest()
+ request.META["HTTP_ACCEPT"] = ""
+ self.assertIs(request.accepts("application/json"), False)
+ self.assertEqual(request.accepted_types, [])
+
+ def test_request_accepts_some(self):
+ request = HttpRequest()
+ request.META[
+ "HTTP_ACCEPT"
+ ] = "text/html,application/xhtml+xml,application/xml;q=0.9"
+ self.assertIs(request.accepts("text/html"), True)
+ self.assertIs(request.accepts("application/xhtml+xml"), True)
+ self.assertIs(request.accepts("application/xml"), True)
+ self.assertIs(request.accepts("application/json"), False)