0001-manager-forbid-desk-deletion-with-future-bookings-24.patch
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 |
- |