123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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)
|