Projet

Général

Profil

0001-manager-forbid-making-booked-event-recurrent-57609.patch

Valentin Deniaud, 18 octobre 2021 17:24

Télécharger (2,87 ko)

Voir les différences:

Subject: [PATCH] manager: forbid making booked event recurrent (#57609)

 chrono/manager/forms.py     |  7 +++++++
 tests/manager/test_event.py | 17 +++++++++++++++++
 2 files changed, 24 insertions(+)
chrono/manager/forms.py
169 169
            ('recurring', _('Recurring')),
170 170
        ),
171 171
        initial='unique',
172
        help_text=_('This field will not be editable once event has bookings.'),
172 173
    )
173 174
    recurrence_days = forms.TypedMultipleChoiceField(
174 175
        choices=Event.WEEKDAY_CHOICES,
......
242 243
    def __init__(self, *args, **kwargs):
243 244
        super().__init__(*args, **kwargs)
244 245
        self.fields['frequency'].initial = 'recurring' if self.instance.recurrence_days else 'unique'
246
        if not self.instance.recurrence_days and self.instance.booking_set.exists():
247
            self.fields['frequency'].disabled = True
248
            self.fields['frequency'].help_text = ''
249
            self.fields['frequency'].widget.attrs['title'] = _(
250
                'This field cannot be modified because event has bookings.'
251
            )
245 252
        if self.instance.recurrence_days and self.instance.has_recurrences_booked():
246 253
            for field in self.protected_fields:
247 254
                self.fields[field].disabled = True
tests/manager/test_event.py
369 369
    assert 'Bookings exist after this date' in resp.text
370 370

  
371 371

  
372
def test_edit_booked_event_disable_frequency_choice(settings, app, admin_user, freezer):
373
    freezer.move_to('2021-01-12 12:10')
374
    agenda = Agenda.objects.create(label='Foo bar', kind='events')
375
    event = Event.objects.create(start_datetime=now(), places=10, agenda=agenda)
376

  
377
    app = login(app)
378
    resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id))
379
    assert 'disabled' not in resp.form['frequency'].attrs
380
    assert 'This field will not be editable once event has bookings.' in resp.text
381

  
382
    Booking.objects.create(event=event)
383
    resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.id, event.id))
384
    assert 'disabled' in resp.form['frequency'].attrs
385
    assert 'cannot be modified' in resp.form['frequency'].attrs['title']
386
    assert 'This field will not be editable once event has bookings.' not in resp.text
387

  
388

  
372 389
def test_booked_places(app, admin_user):
373 390
    agenda = Agenda(label='Foo bar')
374 391
    agenda.save()
375
-