File: test_fields.py

package info (click to toggle)
python-urllib3 1.26.5-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,260 kB
  • sloc: python: 16,933; makefile: 130
file content (102 lines) | stat: -rw-r--r-- 4,191 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
102
import pytest

from urllib3.fields import RequestField, format_header_param_rfc2231, guess_content_type
from six import u


class TestRequestField(object):
    @pytest.mark.parametrize(
        "filename, content_types",
        [
            ("image.jpg", ["image/jpeg", "image/pjpeg"]),
            ("notsure", ["application/octet-stream"]),
            (None, ["application/octet-stream"]),
        ],
    )
    def test_guess_content_type(self, filename, content_types):
        assert guess_content_type(filename) in content_types

    def test_create(self):
        simple_field = RequestField("somename", "data")
        assert simple_field.render_headers() == "\r\n"
        filename_field = RequestField("somename", "data", filename="somefile.txt")
        assert filename_field.render_headers() == "\r\n"
        headers_field = RequestField("somename", "data", headers={"Content-Length": 4})
        assert headers_field.render_headers() == "Content-Length: 4\r\n\r\n"

    def test_make_multipart(self):
        field = RequestField("somename", "data")
        field.make_multipart(content_type="image/jpg", content_location="/test")
        assert (
            field.render_headers()
            == 'Content-Disposition: form-data; name="somename"\r\n'
            "Content-Type: image/jpg\r\n"
            "Content-Location: /test\r\n"
            "\r\n"
        )

    def test_make_multipart_empty_filename(self):
        field = RequestField("somename", "data", "")
        field.make_multipart(content_type="application/octet-stream")
        assert (
            field.render_headers()
            == 'Content-Disposition: form-data; name="somename"; filename=""\r\n'
            "Content-Type: application/octet-stream\r\n"
            "\r\n"
        )

    def test_render_parts(self):
        field = RequestField("somename", "data")
        parts = field._render_parts({"name": "value", "filename": "value"})
        assert 'name="value"' in parts
        assert 'filename="value"' in parts
        parts = field._render_parts([("name", "value"), ("filename", "value")])
        assert parts == 'name="value"; filename="value"'

    def test_render_part_rfc2231_unicode(self):
        field = RequestField(
            "somename", "data", header_formatter=format_header_param_rfc2231
        )
        param = field._render_part("filename", u("n\u00e4me"))
        assert param == "filename*=utf-8''n%C3%A4me"

    def test_render_part_rfc2231_ascii(self):
        field = RequestField(
            "somename", "data", header_formatter=format_header_param_rfc2231
        )
        param = field._render_part("filename", b"name")
        assert param == 'filename="name"'

    def test_render_part_html5_unicode(self):
        field = RequestField("somename", "data")
        param = field._render_part("filename", u("n\u00e4me"))
        assert param == u('filename="n\u00e4me"')

    def test_render_part_html5_ascii(self):
        field = RequestField("somename", "data")
        param = field._render_part("filename", b"name")
        assert param == 'filename="name"'

    def test_render_part_html5_unicode_escape(self):
        field = RequestField("somename", "data")
        param = field._render_part("filename", u("hello\\world\u0022"))
        assert param == u('filename="hello\\\\world%22"')

    def test_render_part_html5_unicode_with_control_character(self):
        field = RequestField("somename", "data")
        param = field._render_part("filename", u("hello\x1A\x1B\x1C"))
        assert param == u('filename="hello%1A\x1B%1C"')

    def test_from_tuples_rfc2231(self):
        field = RequestField.from_tuples(
            u("fieldname"),
            (u("filen\u00e4me"), "data"),
            header_formatter=format_header_param_rfc2231,
        )
        cd = field.headers["Content-Disposition"]
        assert cd == u("form-data; name=\"fieldname\"; filename*=utf-8''filen%C3%A4me")

    def test_from_tuples_html5(self):
        field = RequestField.from_tuples(u("fieldname"), (u("filen\u00e4me"), "data"))
        cd = field.headers["Content-Disposition"]
        assert cd == u('form-data; name="fieldname"; filename="filen\u00e4me"')