File: test_accept_header.py

package info (click to toggle)
python-django 3%3A3.2.19-1%2Bdeb12u2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 56,696 kB
  • sloc: python: 264,418; javascript: 18,362; xml: 193; makefile: 178; sh: 43
file content (101 lines) | stat: -rw-r--r-- 3,843 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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)