@@ -205,6 +205,150 @@ def test_manage_project_releases(self):
205
205
}
206
206
207
207
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
+
208
352
class TestManageProjectRoles :
209
353
210
354
def test_get_manage_project_roles (self , db_request ):
0 commit comments