13
13
import datetime
14
14
15
15
import pretend
16
+ import pytest
17
+ from pyramid .httpexceptions import HTTPBadRequest
16
18
17
19
from warehouse .rss import views as rss
20
+ from warehouse .utils import now
18
21
19
22
from ...common .db .packaging import ProjectFactory , ReleaseFactory
20
23
@@ -44,6 +47,76 @@ def test_rss_updates(db_request):
44
47
assert db_request .response .content_type == "text/xml"
45
48
46
49
50
+ def test_rss_updates_limit (db_request ):
51
+ db_request .params = {"limit" : 2 }
52
+
53
+ db_request .find_service = pretend .call_recorder (
54
+ lambda * args , ** kwargs : pretend .stub (
55
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
56
+ )
57
+ )
58
+
59
+ db_request .session = pretend .stub ()
60
+
61
+ project1 = ProjectFactory .create ()
62
+ project2 = ProjectFactory .create ()
63
+
64
+ release1 = ReleaseFactory .create (project = project1 )
65
+ release1 .created = datetime .date (2011 , 1 , 1 )
66
+ release2 = ReleaseFactory .create (project = project2 )
67
+ release2 .created = datetime .date (2012 , 1 , 1 )
68
+ release3 = ReleaseFactory .create (project = project1 )
69
+ release3 .created = datetime .date (2013 , 1 , 1 )
70
+
71
+ assert rss .rss_updates (db_request ) == {
72
+ "latest_releases" : [release3 , release2 ]
73
+ }
74
+ assert db_request .response .content_type == "text/xml"
75
+
76
+
77
+ def test_rss_updates_max_age (db_request ):
78
+ db_request .params = {"max_age" : 150 }
79
+
80
+ db_request .find_service = pretend .call_recorder (
81
+ lambda * args , ** kwargs : pretend .stub (
82
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
83
+ )
84
+ )
85
+
86
+ db_request .session = pretend .stub ()
87
+
88
+ project1 = ProjectFactory .create ()
89
+
90
+ release1 = ReleaseFactory .create (project = project1 )
91
+ release1 .created = now () - datetime .timedelta (seconds = 100 )
92
+ release2 = ReleaseFactory .create (project = project1 )
93
+ release2 .created = now () - datetime .timedelta (seconds = 200 )
94
+
95
+ assert rss .rss_updates (db_request ) == {
96
+ "latest_releases" : [release1 ]
97
+ }
98
+ assert db_request .response .content_type == "text/xml"
99
+
100
+
101
+ def test_rss_updates_max_age_invalid (db_request ):
102
+ db_request .params = {"max_age" : "foo" }
103
+
104
+ db_request .find_service = pretend .call_recorder (
105
+ lambda * args , ** kwargs : pretend .stub (
106
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
107
+ )
108
+ )
109
+
110
+ db_request .session = pretend .stub ()
111
+
112
+ with pytest .raises (HTTPBadRequest ) as excinfo :
113
+ rss .rss_updates (db_request )
114
+
115
+ resp = excinfo .value
116
+
117
+ assert resp .status_code == 400
118
+
119
+
47
120
def test_rss_packages (db_request ):
48
121
db_request .find_service = pretend .call_recorder (
49
122
lambda * args , ** kwargs : pretend .stub (
@@ -66,3 +139,49 @@ def test_rss_packages(db_request):
66
139
67
140
assert rss .rss_packages (db_request ) == {"newest_projects" : [project3 , project1 ]}
68
141
assert db_request .response .content_type == "text/xml"
142
+
143
+
144
+ def test_rss_packages_limit (db_request ):
145
+ db_request .params = {"limit" : 1 }
146
+
147
+ db_request .find_service = pretend .call_recorder (
148
+ lambda * args , ** kwargs : pretend .stub (
149
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
150
+ )
151
+ )
152
+
153
+ db_request .session = pretend .stub ()
154
+
155
+ project1 = ProjectFactory .create ()
156
+ project1 .created = datetime .date (2011 , 1 , 1 )
157
+ ReleaseFactory .create (project = project1 )
158
+
159
+ project2 = ProjectFactory .create ()
160
+ project2 .created = datetime .date (2012 , 1 , 1 )
161
+ ReleaseFactory .create (project = project2 )
162
+
163
+ assert rss .rss_packages (db_request ) == {"newest_projects" : [project2 ]}
164
+ assert db_request .response .content_type == "text/xml"
165
+
166
+
167
+ def test_rss_packages_max_age (db_request ):
168
+ db_request .params = {"max_age" : 150 }
169
+
170
+ db_request .find_service = pretend .call_recorder (
171
+ lambda * args , ** kwargs : pretend .stub (
172
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
173
+ )
174
+ )
175
+
176
+ db_request .session = pretend .stub ()
177
+
178
+ project1 = ProjectFactory .create ()
179
+ project1 .created = now () - datetime .timedelta (seconds = 100 )
180
+ ReleaseFactory .create (project = project1 )
181
+
182
+ project2 = ProjectFactory .create ()
183
+ project2 .created = now () - datetime .timedelta (seconds = 200 )
184
+ ReleaseFactory .create (project = project2 )
185
+
186
+ assert rss .rss_packages (db_request ) == {"newest_projects" : [project1 ]}
187
+ assert db_request .response .content_type == "text/xml"
0 commit comments