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,72 @@ 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 ) == {"latest_releases" : [release3 , release2 ]}
72
+ assert db_request .response .content_type == "text/xml"
73
+
74
+
75
+ def test_rss_updates_max_age (db_request ):
76
+ db_request .params = {"max_age" : 150 }
77
+
78
+ db_request .find_service = pretend .call_recorder (
79
+ lambda * args , ** kwargs : pretend .stub (
80
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
81
+ )
82
+ )
83
+
84
+ db_request .session = pretend .stub ()
85
+
86
+ project1 = ProjectFactory .create ()
87
+
88
+ release1 = ReleaseFactory .create (project = project1 )
89
+ release1 .created = now () - datetime .timedelta (seconds = 100 )
90
+ release2 = ReleaseFactory .create (project = project1 )
91
+ release2 .created = now () - datetime .timedelta (seconds = 200 )
92
+
93
+ assert rss .rss_updates (db_request ) == {"latest_releases" : [release1 ]}
94
+ assert db_request .response .content_type == "text/xml"
95
+
96
+
97
+ def test_rss_updates_max_age_invalid (db_request ):
98
+ db_request .params = {"max_age" : "foo" }
99
+
100
+ db_request .find_service = pretend .call_recorder (
101
+ lambda * args , ** kwargs : pretend .stub (
102
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
103
+ )
104
+ )
105
+
106
+ db_request .session = pretend .stub ()
107
+
108
+ with pytest .raises (HTTPBadRequest ) as excinfo :
109
+ rss .rss_updates (db_request )
110
+
111
+ resp = excinfo .value
112
+
113
+ assert resp .status_code == 400
114
+
115
+
47
116
def test_rss_packages (db_request ):
48
117
db_request .find_service = pretend .call_recorder (
49
118
lambda * args , ** kwargs : pretend .stub (
@@ -66,3 +135,49 @@ def test_rss_packages(db_request):
66
135
67
136
assert rss .rss_packages (db_request ) == {"newest_projects" : [project3 , project1 ]}
68
137
assert db_request .response .content_type == "text/xml"
138
+
139
+
140
+ def test_rss_packages_limit (db_request ):
141
+ db_request .params = {"limit" : 1 }
142
+
143
+ db_request .find_service = pretend .call_recorder (
144
+ lambda * args , ** kwargs : pretend .stub (
145
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
146
+ )
147
+ )
148
+
149
+ db_request .session = pretend .stub ()
150
+
151
+ project1 = ProjectFactory .create ()
152
+ project1 .created = datetime .date (2011 , 1 , 1 )
153
+ ReleaseFactory .create (project = project1 )
154
+
155
+ project2 = ProjectFactory .create ()
156
+ project2 .created = datetime .date (2012 , 1 , 1 )
157
+ ReleaseFactory .create (project = project2 )
158
+
159
+ assert rss .rss_packages (db_request ) == {"newest_projects" : [project2 ]}
160
+ assert db_request .response .content_type == "text/xml"
161
+
162
+
163
+ def test_rss_packages_max_age (db_request ):
164
+ db_request .params = {"max_age" : 150 }
165
+
166
+ db_request .find_service = pretend .call_recorder (
167
+ lambda * args , ** kwargs : pretend .stub (
168
+ enabled = False , csp_policy = pretend .stub (), merge = lambda _ : None
169
+ )
170
+ )
171
+
172
+ db_request .session = pretend .stub ()
173
+
174
+ project1 = ProjectFactory .create ()
175
+ project1 .created = now () - datetime .timedelta (seconds = 100 )
176
+ ReleaseFactory .create (project = project1 )
177
+
178
+ project2 = ProjectFactory .create ()
179
+ project2 .created = now () - datetime .timedelta (seconds = 200 )
180
+ ReleaseFactory .create (project = project2 )
181
+
182
+ assert rss .rss_packages (db_request ) == {"newest_projects" : [project1 ]}
183
+ assert db_request .response .content_type == "text/xml"
0 commit comments