File: test_parser_body.py

package info (click to toggle)
python-headerparser 0.5.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 404 kB
  • sloc: python: 3,133; makefile: 6; sh: 4
file content (124 lines) | stat: -rw-r--r-- 4,029 bytes parent folder | download
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import pytest
import headerparser
from headerparser import HeaderParser


def test_require_body() -> None:
    parser = HeaderParser(body=True)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    msg = parser.parse(
        "Foo: red\n"
        "Bar: green\n"
        "Baz: blue\n"
        "\n"
        "This space intentionally left nonblank.\n"
    )
    assert dict(msg) == {"Foo": "red", "Bar": "green", "Baz": "blue"}
    assert msg.body == "This space intentionally left nonblank.\n"


def test_empty_required_body() -> None:
    parser = HeaderParser(body=True)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    msg = parser.parse("Foo: red\nBar: green\nBaz: blue\n\n")
    assert dict(msg) == {"Foo": "red", "Bar": "green", "Baz": "blue"}
    assert msg.body == ""


def test_missing_required_body() -> None:
    parser = HeaderParser(body=True)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    with pytest.raises(headerparser.MissingBodyError) as excinfo:
        parser.parse("Foo: red\nBar: green\nBaz: blue\n")
    assert str(excinfo.value) == "Message body is required but missing"


def test_forbid_body() -> None:
    parser = HeaderParser(body=False)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    msg = parser.parse("Foo: red\nBar: green\nBaz: blue\n")
    assert dict(msg) == {"Foo": "red", "Bar": "green", "Baz": "blue"}
    assert msg.body is None


def test_empty_forbidden_body() -> None:
    parser = HeaderParser(body=False)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    with pytest.raises(headerparser.BodyNotAllowedError) as excinfo:
        parser.parse("Foo: red\nBar: green\nBaz: blue\n\n")
    assert str(excinfo.value) == "Message body is present but not allowed"


def test_present_forbidden_body() -> None:
    parser = HeaderParser(body=False)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    with pytest.raises(headerparser.BodyNotAllowedError) as excinfo:
        parser.parse(
            "Foo: red\n"
            "Bar: green\n"
            "Baz: blue\n"
            "\n"
            "This space intentionally left nonblank.\n"
        )
    assert str(excinfo.value) == "Message body is present but not allowed"


def test_headers_as_required_body() -> None:
    parser = HeaderParser(body=True)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    msg = parser.parse("\nFoo: red\nBar: green\nBaz: blue\n")
    assert dict(msg) == {}
    assert msg.body == "Foo: red\nBar: green\nBaz: blue\n"


def test_headers_as_forbidden_body() -> None:
    parser = HeaderParser(body=False)
    parser.add_field("Foo")
    parser.add_field("Bar")
    parser.add_field("Baz")
    with pytest.raises(headerparser.BodyNotAllowedError) as excinfo:
        parser.parse("\nFoo: red\nBar: green\nBaz: blue\n")
    assert str(excinfo.value) == "Message body is present but not allowed"


def test_required_body_only() -> None:
    parser = HeaderParser(body=True)
    msg = parser.parse("\nFoo: red\nBar: green\nBaz: blue\n")
    assert dict(msg) == {}
    assert msg.body == "Foo: red\nBar: green\nBaz: blue\n"


def test_body_as_unknown_headers() -> None:
    parser = HeaderParser(body=True)
    with pytest.raises(headerparser.UnknownFieldError) as excinfo:
        parser.parse("Foo: red\nBar: green\nBaz: blue\n")
    assert str(excinfo.value) == "Unknown header field 'Foo'"
    assert excinfo.value.name == "Foo"


def test_require_body_all_empty() -> None:
    parser = HeaderParser(body=True)
    msg = parser.parse("\n")
    assert dict(msg) == {}
    assert msg.body == ""


def test_forbid_body_all_empty() -> None:
    parser = HeaderParser(body=False)
    with pytest.raises(headerparser.BodyNotAllowedError) as excinfo:
        parser.parse("\n\n")
    assert str(excinfo.value) == "Message body is present but not allowed"