TestConditionalHTTPTween.test_has_last_modified()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
c 1
b 0
f 1
dl 0
loc 17
rs 9.55
1
from oe_utils import conditional_http_tween_factory
2
import unittest
3
import pretend
4
5
"""
6
tests based on https://github.com/pypa/warehouse/blob/master/tests/unit/cache/test_http.py
7
"""
8
9
10
class TestConditionalHTTPTween(unittest.TestCase):
11
    def setUp(self):
12
        pass
13
14
    def tearDown(self):
15
        pass
16
17
    def test_has_last_modified(self):
18
        response = pretend.stub(
19
            last_modified=pretend.stub(),
20
            status_code=200,
21
            etag=None,
22
            conditional_response=False,
23
            app_iter=iter([b"foo"]),
24
            content_length=None,
25
        )
26
        handler = pretend.call_recorder(lambda request: response)
27
        request = pretend.stub(method="GET", path='/test')
28
29
        tween = conditional_http_tween_factory(handler, pretend.stub())
30
31
        self.assertEqual(tween(request), response)
32
        self.assertListEqual(handler.calls, [pretend.call(request)])
33
        self.assertTrue(response.conditional_response)
34
35 View Code Duplication
    def test_explicit_etag(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
36
        response = pretend.stub(
37
            last_modified=None,
38
            etag="foo",
39
            conditional_response=False,
40
            app_iter=iter([b"foo"]),
41
        )
42
        handler = pretend.call_recorder(lambda request: response)
43
        request = pretend.stub(path='/test')
44
45
        tween = conditional_http_tween_factory(handler, pretend.stub())
46
47
        self.assertEqual(tween(request), response)
48
        self.assertListEqual(handler.calls, [pretend.call(request)])
49
        self.assertTrue(response.conditional_response)
50
51 View Code Duplication
    def test_no_etag(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
52
        response = pretend.stub(
53
            status_code=200,
54
            last_modified=None,
55
            etag=None,
56
            conditional_response=False,
57
            app_iter=iter([b"foo"]),
58
            content_length=None,
59
        )
60
        handler = pretend.call_recorder(lambda request: response)
61
        request = pretend.stub(method="GET", path='/test')
62
63
        tween = conditional_http_tween_factory(handler, pretend.stub())
64
65
        self.assertEqual(tween(request), response)
66
        self.assertListEqual(handler.calls, [pretend.call(request)])
67
        self.assertFalse(response.conditional_response)
68
69
    def test_implicit_etag(self):
70
        response = pretend.stub(
71
            last_modified=None,
72
            etag=None,
73
            conditional_response=False,
74
            md5_etag=pretend.call_recorder(lambda: None),
75
            app_iter=[b"foo"],
76
            status_code=200,
77
            body="{}"
78
        )
79
        handler = pretend.call_recorder(lambda request: response)
80
        request = pretend.stub(method='GET', path='/test')
81
82
        tween = conditional_http_tween_factory(handler, pretend.stub())
83
84
        self.assertEqual(tween(request), response)
85
        self.assertListEqual(handler.calls, [pretend.call(request)])
86
        self.assertTrue(response.conditional_response)
87
        self.assertListEqual(response.md5_etag.calls, [pretend.call()])
88
89
    def test_implicit_etag_black_list(self):
90
        response = pretend.stub(
91
            last_modified=None,
92
            etag=None,
93
            conditional_response=False,
94
            md5_etag=pretend.call_recorder(lambda: None),
95
            app_iter=[b"foo"],
96
            status_code=200,
97
            body="{}"
98
        )
99
        handler = pretend.call_recorder(lambda request: response)
100
        request = pretend.stub(method='GET', path='/aanmelden')
101
102
        tween = conditional_http_tween_factory(handler, pretend.stub(settings={"not.cachable.list": "/aanmelden"}))
103
104
        self.assertEqual(tween(request), response)
105
        self.assertListEqual(handler.calls, [pretend.call(request)])
106
        self.assertFalse(response.conditional_response)
107
108
    def test_implicit_etag_no_body(self):
109
        response = pretend.stub(
110
            last_modified=None,
111
            etag=None,
112
            conditional_response=False,
113
            md5_etag=pretend.call_recorder(lambda: None),
114
            app_iter=[b"foo"],
115
            status_code=200,
116
            body=None
117
        )
118
        handler = pretend.call_recorder(lambda request: response)
119
        request = pretend.stub(method='GET', path='/test')
120
121
        tween = conditional_http_tween_factory(handler, pretend.stub(settings={"not.cachable.list": "/aanmelden"}))
122
123
        self.assertEqual(tween(request), response)
124
        self.assertListEqual(handler.calls, [pretend.call(request)])
125
        self.assertFalse(response.conditional_response)
126
127
    def test_implicit_etag_post(self):
128
        response = pretend.stub(
129
            last_modified=None,
130
            etag=None,
131
            conditional_response=False,
132
            md5_etag=pretend.call_recorder(lambda: None),
133
            app_iter=[b"foo"],
134
            status_code=201,
135
            body=None
136
        )
137
        handler = pretend.call_recorder(lambda request: response)
138
        request = pretend.stub(method='POST', path='/test')
139
140
        tween = conditional_http_tween_factory(handler, pretend.stub())
141
142
        self.assertEqual(tween(request), response)
143
        self.assertListEqual(handler.calls, [pretend.call(request)])
144
        self.assertFalse(response.conditional_response)
145