Projet

Général

Profil

0001-manager-forbid-dates-inferior-to-2000-71558.patch

Emmanuel Cazenave, 05 décembre 2022 17:45

Télécharger (6,22 ko)

Voir les différences:

Subject: [PATCH] manager: forbid dates inferior to 2000 (#71558)

 chrono/manager/forms.py          | 16 ++++++++++++++++
 tests/manager/test_event.py      | 17 +++++++++++++++++
 tests/manager/test_exception.py  | 18 ++++++++++++++++++
 tests/manager/test_timeperiod.py | 17 +++++++++++++++++
 4 files changed, 68 insertions(+)
chrono/manager/forms.py
212 212
            self.cleaned_data['recurrence_days'] = None
213 213
            self.cleaned_data['recurrence_end_date'] = None
214 214

  
215
    def clean_start_datetime(self):
216
        start_datetime = self.cleaned_data['start_datetime']
217
        if start_datetime.year < 2000:
218
            raise ValidationError(_('Year must be superior to 2000.'))
219
        return start_datetime
220

  
215 221
    def clean_recurrence_days(self):
216 222
        recurrence_days = self.cleaned_data['recurrence_days']
217 223
        if recurrence_days == []:
......
890 896
        if self.instance.weekday_indexes:
891 897
            self.fields['repeat'].initial = 'custom'
892 898

  
899
    def clean_date(self):
900
        data = self.cleaned_data['date']
901
        if data.year < 2000:
902
            raise ValidationError(_('Year must be superior to 2000.'))
903
        return data
904

  
893 905
    def save(self):
894 906
        super().save()
895 907

  
......
984 996
    def clean(self):
985 997
        cleaned_data = super().clean()
986 998

  
999
        for date_field in ('start_datetime', 'end_datetime'):
1000
            if date_field in cleaned_data and cleaned_data[date_field].year < 2000:
1001
                self.add_error(date_field, _('Year must be superior to 2000.'))
1002

  
987 1003
        if 'start_datetime' in cleaned_data and 'end_datetime' in cleaned_data:
988 1004
            if cleaned_data['end_datetime'] <= cleaned_data['start_datetime']:
989 1005
                self.add_error('end_datetime', _('End datetime must be greater than start datetime.'))
tests/manager/test_event.py
152 152
    assert event.end_datetime == event.start_datetime + datetime.timedelta(minutes=45)
153 153

  
154 154

  
155
def test_add_event_third_millennium(app, admin_user):
156
    agenda = Agenda.objects.create(label='Foo bar')
157
    Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
158
    assert Event.objects.filter(agenda=agenda).count() == 0
159
    app = login(app)
160
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
161
    assert '<h2>Settings' in resp.text
162
    resp = resp.click('New Event')
163
    resp.form['start_datetime_0'] = '0022-02-15'
164
    resp.form['start_datetime_1'] = '17:00'
165
    resp.form['places'] = 10
166
    resp.form['duration'] = 45
167
    resp = resp.form.submit()
168
    assert resp.context['form'].errors['start_datetime'] == ['Year must be superior to 2000.']
169
    assert Event.objects.filter(agenda=agenda).count() == 0
170

  
171

  
155 172
def test_edit_event(settings, app, admin_user):
156 173
    settings.LANGUAGE_CODE = 'fr-fr'  # check date initial value format
157 174
    agenda = Agenda.objects.create(label='Foo bar')
tests/manager/test_exception.py
110 110
    assert 'Exception 2' in resp.text
111 111

  
112 112

  
113
def test_meetings_agenda_add_time_period_exception_third_millennium(app, admin_user):
114
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
115
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
116
    assert TimePeriodException.objects.filter(desk=desk).count() == 0
117
    app = login(app)
118
    resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
119
    resp = resp.click('Add a time period exception', index=0)
120
    resp.form['label'] = 'Exception 1'
121
    resp.form['start_datetime_0'] = '0022-10-24'
122
    resp.form['start_datetime_1'] = '08:00'
123
    resp.form['end_datetime_0'] = '0022-10-24'
124
    resp.form['end_datetime_1'] = '16:00'
125
    resp = resp.form.submit()
126
    assert resp.context['form'].errors['start_datetime'] == ['Year must be superior to 2000.']
127
    assert resp.context['form'].errors['end_datetime'] == ['Year must be superior to 2000.']
128
    assert TimePeriodException.objects.filter(desk=desk).count() == 0
129

  
130

  
113 131
def test_meetings_agenda_add_time_period_exception_booking_overlaps(app, admin_user):
114 132
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
115 133
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
tests/manager/test_timeperiod.py
317 317
    assert TimePeriod.objects.count() == 0
318 318

  
319 319

  
320
@pytest.mark.freeze_time('2022-10-24 10:00')
321
def test_meetings_agenda_date_time_period_third_millennium(app, admin_user):
322
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings', desk_simple_management=True)
323
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
324
    assert agenda.is_available_for_simple_management() is True
325
    assert TimePeriod.objects.filter(desk=desk).count() == 0
326

  
327
    app = login(app)
328
    resp = app.get('/manage/agendas/%s/desk/%s/add-date-time-period' % (agenda.pk, desk.pk))
329
    resp.form['date'] = '0022-10-24'
330
    resp.form['start_time'] = '10:00'
331
    resp.form['end_time'] = '13:00'
332
    resp = resp.form.submit()
333
    assert resp.context['form'].errors['date'] == ['Year must be superior to 2000.']
334
    assert TimePeriod.objects.filter(desk=desk).count() == 0
335

  
336

  
320 337
@pytest.mark.freeze_time('2022-10-23')
321 338
def test_meetings_agenda_date_time_period_display(app, admin_user):
322 339
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
323
-