Skip to content

Commit f9ee018

Browse files
committed
Add tests
1 parent 52aaed7 commit f9ee018

File tree

2 files changed

+151
-0
lines changed

2 files changed

+151
-0
lines changed

tests/unit/manage/test_views.py

+144
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,150 @@ def test_manage_project_releases(self):
205205
}
206206

207207

208+
class TestManageProjectRelease:
209+
210+
def test_manage_project_release(self):
211+
files = pretend.stub()
212+
project = pretend.stub()
213+
release = pretend.stub(
214+
project=project,
215+
files=pretend.stub(all=lambda: files),
216+
)
217+
request = pretend.stub()
218+
view = views.ManageProjectRelease(release, request)
219+
220+
assert view.manage_project_release() == {
221+
'project': project,
222+
'release': release,
223+
'files': files,
224+
}
225+
226+
def test_delete_project_release(self, monkeypatch):
227+
release = pretend.stub(
228+
version='1.2.3',
229+
project=pretend.stub(name='foobar'),
230+
)
231+
request = pretend.stub(
232+
POST={'confirm-version': release.version},
233+
method="POST",
234+
db=pretend.stub(
235+
delete=pretend.call_recorder(lambda a: None),
236+
add=pretend.call_recorder(lambda a: None),
237+
),
238+
route_path=pretend.call_recorder(lambda *a, **kw: '/the-redirect'),
239+
session=pretend.stub(
240+
flash=pretend.call_recorder(lambda *a, **kw: None)
241+
),
242+
user=pretend.stub(),
243+
remote_addr=pretend.stub(),
244+
)
245+
journal_obj = pretend.stub()
246+
journal_cls = pretend.call_recorder(lambda **kw: journal_obj)
247+
monkeypatch.setattr(views, 'JournalEntry', journal_cls)
248+
249+
view = views.ManageProjectRelease(release, request)
250+
251+
result = view.delete_project_release()
252+
253+
assert isinstance(result, HTTPSeeOther)
254+
assert result.headers["Location"] == "/the-redirect"
255+
256+
assert request.db.delete.calls == [pretend.call(release)]
257+
assert request.db.add.calls == [pretend.call(journal_obj)]
258+
assert journal_cls.calls == [
259+
pretend.call(
260+
name=release.project.name,
261+
action="remove",
262+
version=release.version,
263+
submitted_by=request.user,
264+
submitted_from=request.remote_addr,
265+
),
266+
]
267+
assert request.session.flash.calls == [
268+
pretend.call(
269+
f"Successfully deleted release {release.version!r}.",
270+
queue="success",
271+
)
272+
]
273+
assert request.route_path.calls == [
274+
pretend.call(
275+
'manage.project.releases',
276+
project_name=release.project.name,
277+
)
278+
]
279+
280+
def test_delete_project_release_no_confirm(self):
281+
release = pretend.stub(
282+
version='1.2.3',
283+
project=pretend.stub(name='foobar'),
284+
)
285+
request = pretend.stub(
286+
POST={'confirm-version': ''},
287+
method="POST",
288+
db=pretend.stub(delete=pretend.call_recorder(lambda a: None)),
289+
route_path=pretend.call_recorder(lambda *a, **kw: '/the-redirect'),
290+
session=pretend.stub(
291+
flash=pretend.call_recorder(lambda *a, **kw: None)
292+
),
293+
)
294+
view = views.ManageProjectRelease(release, request)
295+
296+
result = view.delete_project_release()
297+
298+
assert isinstance(result, HTTPSeeOther)
299+
assert result.headers["Location"] == "/the-redirect"
300+
301+
assert request.db.delete.calls == []
302+
assert request.session.flash.calls == [
303+
pretend.call(
304+
"Must confirm the request.", queue='error'
305+
)
306+
]
307+
assert request.route_path.calls == [
308+
pretend.call(
309+
'manage.project.release',
310+
project_name=release.project.name,
311+
version=release.version,
312+
)
313+
]
314+
315+
def test_delete_project_release_bad_confirm(self):
316+
release = pretend.stub(
317+
version='1.2.3',
318+
project=pretend.stub(name='foobar'),
319+
)
320+
request = pretend.stub(
321+
POST={'confirm-version': 'invalid'},
322+
method="POST",
323+
db=pretend.stub(delete=pretend.call_recorder(lambda a: None)),
324+
route_path=pretend.call_recorder(lambda *a, **kw: '/the-redirect'),
325+
session=pretend.stub(
326+
flash=pretend.call_recorder(lambda *a, **kw: None)
327+
),
328+
)
329+
view = views.ManageProjectRelease(release, request)
330+
331+
result = view.delete_project_release()
332+
333+
assert isinstance(result, HTTPSeeOther)
334+
assert result.headers["Location"] == "/the-redirect"
335+
336+
assert request.db.delete.calls == []
337+
assert request.session.flash.calls == [
338+
pretend.call(
339+
f"'invalid' is not the same as {release.version!r}",
340+
queue="error",
341+
)
342+
]
343+
assert request.route_path.calls == [
344+
pretend.call(
345+
'manage.project.release',
346+
project_name=release.project.name,
347+
version=release.version,
348+
)
349+
]
350+
351+
208352
class TestManageProjectRoles:
209353

210354
def test_get_manage_project_roles(self, db_request):

tests/unit/test_routes.py

+7
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ def add_policy(name, filename):
168168
traverse="/{project_name}",
169169
domain=warehouse,
170170
),
171+
pretend.call(
172+
"manage.project.release",
173+
"/manage/project/{project_name}/release/{version}/",
174+
factory="warehouse.packaging.models:ProjectFactory",
175+
traverse="/{project_name}/{version}",
176+
domain=warehouse,
177+
),
171178
pretend.call(
172179
"manage.project.roles",
173180
"/manage/project/{project_name}/collaboration/",

0 commit comments

Comments
 (0)