mirror of
https://github.com/django/django.git
synced 2025-08-03 10:34:04 +00:00
Refs #30997 -- Added HttpRequest.accepts().
This commit is contained in:
parent
cf493e5c81
commit
d66d72f956
5 changed files with 192 additions and 12 deletions
101
tests/requests/test_accept_header.py
Normal file
101
tests/requests/test_accept_header.py
Normal file
|
@ -0,0 +1,101 @@
|
|||
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)
|
Loading…
Add table
Add a link
Reference in a new issue