Projet

Général

Profil

0001-agenda-dont-check-for-bookings-on-exception-creation.patch

Lauréline Guérin, 22 mai 2020 14:19

Télécharger (5,01 ko)

Voir les différences:

Subject: [PATCH] agenda: dont check for bookings on exception creation
 (#42336)

 chrono/agendas/models.py | 16 ----------
 tests/test_manager.py    | 69 ----------------------------------------
 2 files changed, 85 deletions(-)
chrono/agendas/models.py
1146 1146

  
1147 1147
        return exc_repr
1148 1148

  
1149
    def clean(self):
1150
        super(TimePeriodException, self).clean()
1151
        if self.has_booking_within_time_slot():
1152
            raise ValidationError(_('One or several bookings exists within this time slot.'))
1153

  
1154
    def has_booking_within_time_slot(self):
1155
        if not (self.start_datetime and self.end_datetime):
1156
            # incomplete time period, can't tell
1157
            return False
1158
        for event in Event.objects.filter(
1159
            desk=self.desk, booking__isnull=False, booking__cancellation_datetime__isnull=True
1160
        ):
1161
            if self.start_datetime <= event.start_datetime < self.end_datetime:
1162
                return True
1163
        return False
1164

  
1165 1149
    @classmethod
1166 1150
    def import_json(cls, data):
1167 1151
        def import_datetime(s):
tests/test_manager.py
1090 1090
    assert 'Exception 2' in resp.text
1091 1091

  
1092 1092

  
1093
def test_meetings_agenda_add_time_period_exception_when_booking_exists(app, admin_user):
1094
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
1095
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
1096
    MeetingType(agenda=agenda, label='Blah').save()
1097
    TimePeriod.objects.create(
1098
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1099
    )
1100
    event = Event.objects.create(
1101
        agenda=agenda, places=1, desk=desk, start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 30))
1102
    )
1103
    Booking.objects.create(event=event)
1104
    login(app)
1105
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1106
    resp = resp.click('Settings')
1107
    resp = resp.click('Add a time period exception')
1108
    resp = resp.form.submit()  # submit empty form
1109
    # fields should be marked with errors
1110
    assert resp.text.count('This field is required.') == 2
1111
    # try again with data in fields
1112
    resp.form['start_datetime$date'] = '2017-05-22'
1113
    resp.form['start_datetime$time'] = '08:00'
1114
    resp.form['end_datetime$date'] = '2017-05-26'
1115
    resp.form['end_datetime$time'] = '17:30'
1116
    resp = resp.form.submit()
1117
    assert 'One or several bookings exists within this time slot.' in resp.text
1118
    assert TimePeriodException.objects.count() == 0
1119

  
1120
    # check it's possible to add an exception on another desk
1121
    desk = Desk.objects.create(agenda=agenda, label='Desk B')
1122
    TimePeriod.objects.create(
1123
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1124
    )
1125
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1126
    resp = resp.click('Settings')
1127
    resp = resp.click('Add a time period exception', href='desk/%s/' % desk.id)
1128
    resp.form['start_datetime$date'] = '2017-05-22'
1129
    resp.form['start_datetime$time'] = '08:00'
1130
    resp.form['end_datetime$date'] = '2017-05-26'
1131
    resp.form['end_datetime$time'] = '17:30'
1132
    resp = resp.form.submit()
1133
    assert TimePeriodException.objects.count() == 1
1134

  
1135

  
1136
def test_meetings_agenda_add_time_period_exception_when_cancelled_booking_exists(app, admin_user):
1137
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
1138
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
1139
    MeetingType(agenda=agenda, label='Blah').save()
1140
    TimePeriod.objects.create(
1141
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
1142
    )
1143
    event = Event.objects.create(
1144
        agenda=agenda, places=1, start_datetime=make_aware(datetime.datetime(2017, 5, 22, 10, 30))
1145
    )
1146
    Booking.objects.create(
1147
        event=event, cancellation_datetime=make_aware(datetime.datetime(2017, 5, 20, 10, 30))
1148
    )
1149
    login(app)
1150
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
1151
    resp = resp.click('Settings')
1152
    resp = resp.click('Add a time period exception')
1153
    resp.form['start_datetime$date'] = '2017-05-22'
1154
    resp.form['start_datetime$time'] = '08:00'
1155
    resp.form['end_datetime$date'] = '2017-05-26'
1156
    resp.form['end_datetime$time'] = '17:30'
1157
    resp = resp.form.submit()
1158
    assert 'One or several bookings exists within this time slot.' not in resp.text
1159
    assert TimePeriodException.objects.count() == 1
1160

  
1161

  
1162 1093
def test_meetings_agenda_add_invalid_time_period_exception():
1163 1094
    form = TimePeriodExceptionForm(
1164 1095
        data={
1165
-