Projet

Général

Profil

0002-manager-add-recurrences-on-event-creation-60504.patch

Valentin Deniaud, 11 janvier 2022 16:15

Télécharger (3,76 ko)

Voir les différences:

Subject: [PATCH 2/2] manager: add recurrences on event creation (#60504)

 chrono/manager/forms.py     | 18 ++++++++++++++----
 tests/manager/test_event.py | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+), 4 deletions(-)
chrono/manager/forms.py
24 24
from django.conf import settings
25 25
from django.contrib.auth.models import Group
26 26
from django.core.exceptions import FieldDoesNotExist
27
from django.db import transaction
27 28
from django.forms import ValidationError
28 29
from django.utils.encoding import force_text
29 30
from django.utils.six import StringIO
......
198 199
            'recurrence_end_date': forms.DateInput(attrs={'type': 'date'}, format='%Y-%m-%d'),
199 200
        }
200 201

  
202
    def clean(self):
203
        super().clean()
204
        if self.cleaned_data.get('frequency') == 'unique':
205
            self.cleaned_data['recurrence_days'] = None
206
            self.cleaned_data['recurrence_end_date'] = None
207

  
201 208
    def clean_recurrence_days(self):
202 209
        recurrence_days = self.cleaned_data['recurrence_days']
203 210
        if recurrence_days == []:
204 211
            return None
205 212
        return recurrence_days
206 213

  
214
    def save(self, *args, **kwargs):
215
        with transaction.atomic():
216
            event = super().save(*args, **kwargs)
217
            if event.recurrence_end_date:
218
                event.create_all_recurrences()
219
        return event
220

  
207 221

  
208 222
class EventForm(NewEventForm):
209 223
    protected_fields = (
......
281 295
        ):
282 296
            raise ValidationError(_('Bookings exist after this date.'))
283 297

  
284
        if self.cleaned_data.get('frequency') == 'unique':
285
            self.cleaned_data['recurrence_days'] = None
286
            self.cleaned_data['recurrence_end_date'] = None
287

  
288 298
    def save(self, *args, **kwargs):
289 299
        with self.instance.update_recurrences(
290 300
            self.changed_data,
tests/manager/test_event.py
62 62
        )
63 63

  
64 64

  
65
@pytest.mark.freeze_time('2021-05-06 14:00')
66
def test_add_recurring_event(app, admin_user):
67
    agenda = Agenda.objects.create(label='Foo bar', kind='events')
68
    Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
69

  
70
    app = login(app)
71
    resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
72
    resp = resp.click('New Event')
73
    resp.form['start_datetime_0'] = '2021-06-01'
74
    resp.form['start_datetime_1'] = '17:00'
75
    resp.form['places'] = 10
76
    resp.form['frequency'] = 'unique'  # not a recurring event
77
    resp.form['recurrence_days'] = [1]
78
    resp.form.submit().follow()
79

  
80
    event = Event.objects.get()
81
    assert event.recurrence_days is None
82
    event.delete()
83

  
84
    # add recurring event
85
    resp.form['frequency'] = 'recurring'
86
    resp.form.submit().follow()
87

  
88
    event = Event.objects.get()
89
    assert event.recurrence_days == [1]
90
    event.delete()
91

  
92
    # add recurring event with end date
93
    resp.form['recurrence_end_date'] = '2021-07-01'
94
    resp.form.submit().follow()
95

  
96
    event = Event.objects.get(primary_event__isnull=True)
97
    assert event.recurrence_days == [1]
98
    assert Event.objects.filter(primary_event=event).count() == 5
99

  
100

  
65 101
def test_add_event_on_missing_agenda(app, admin_user):
66 102
    app = login(app)
67 103
    app.get('/manage/agendas/%s/add-event' % '0', status=404)
68
-