Projet

Général

Profil

0001-manager-forbid-desk-deletion-with-future-bookings-24.patch

Voir les différences:

Subject: [PATCH] manager: forbid desk deletion with future bookings (#24415)

 chrono/manager/views.py | 15 +++++++++++++++
 tests/test_manager.py   | 31 +++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)
chrono/manager/views.py
507 507
    template_name = 'chrono/manager_confirm_delete.html'
508 508
    model = Desk
509 509

  
510
    def get_context_data(self, **kwargs):
511
        context = super(DeskDeleteView, self).get_context_data(**kwargs)
512
        context['cannot_delete'] = Booking.objects.filter(
513
                event__desk=self.get_object(),
514
                event__start_datetime__gt=now(),
515
                cancellation_datetime__isnull=True).exists()
516
        return context
517

  
518
    def delete(self, request, *args, **kwargs):
519
        self.object = self.get_object()
520
        context = self.get_context_data()
521
        if context['cannot_delete']:
522
            raise PermissionDenied()
523
        return super(DeskDeleteView, self).delete(request, *args, **kwargs)
524

  
510 525

  
511 526
desk_delete = DeskDeleteView.as_view()
512 527

  
tests/test_manager.py
276 276
    assert 'Delete' not in resp.text
277 277
    resp = app.get('/manage/agendas/%s/delete' % agenda.id, status=403)
278 278

  
279

  
280
def test_delete_busy_desk(app, admin_user):
281
    agenda = Agenda(label=u'Foo bar', kind='meetings')
282
    agenda.save()
283
    desk_a = Desk.objects.create(agenda=agenda, label='Desk A')
284
    desk_b = Desk.objects.create(agenda=agenda, label='Desk B')
285

  
286
    event = Event(start_datetime=now() + datetime.timedelta(days=10),
287
                  places=10, agenda=agenda, desk=desk_a)
288
    event.save()
289

  
290
    app = login(app)
291
    resp = app.get('/manage/', status=200)
292
    resp = resp.click('Foo bar').follow()
293
    resp = resp.click('Settings')
294
    desk_page = resp.click('Desk A')
295
    desk_delete_page = desk_page.click('Delete')
296
    assert 'Are you sure you want to delete this?' in desk_delete_page.text
297
    # make sure the deleting is not disabled
298
    assert 'disabled' not in desk_delete_page.text
299

  
300
    booking = Booking(event=event)
301
    booking.save()
302

  
303
    resp = desk_page.click('Delete')
304
    assert 'This cannot be removed' in resp.text
305
    # the button is disabled
306
    assert 'disabled' in resp.text
307
    app.post('/manage/desks/%s/delete' % desk_a.pk, status=403)
308

  
309

  
279 310
def test_add_event(app, admin_user):
280 311
    agenda = Agenda(label=u'Foo bar')
281 312
    agenda.maximal_booking_delay = 0
282
-