Projet

Général

Profil

0001-manager-allow-timeperiod-exceptions-with-the-same-su.patch

Serghei Mihai (congés, retour 15/05), 31 août 2018 15:56

Télécharger (4,63 ko)

Voir les différences:

Subject: [PATCH] manager: allow timeperiod exceptions with the same summary
 (#25962)

 chrono/agendas/models.py | 18 ++++++++++--------
 tests/test_agendas.py    |  6 +++---
 tests/test_manager.py    | 10 ++++++++--
 3 files changed, 21 insertions(+), 13 deletions(-)
chrono/agendas/models.py
526 526
                event['end_datetime'] = end_dt
527 527
                event['label'] = summary
528 528

  
529
                kwargs = {}
530
                kwargs['desk'] = self
529
                kwargs = {'desk': self}
531 530
                if keep_synced_by_uid:
531
                    # event from remote ics
532 532
                    kwargs['external_id'] = vevent.contents['uid'][0].value
533
                else:
534
                    kwargs['label'] = summary
535 533

  
536 534
                if not vevent.rruleset:
537
                    # classical event
538
                    obj, created = TimePeriodException.objects.update_or_create(defaults=event, **kwargs)
539
                    if created:
535
                    if keep_synced_by_uid:
536
                        obj, created = TimePeriodException.objects.update_or_create(defaults=event, **kwargs)
537
                        if created:
538
                            total_created += 1
539
                    # event from local ics file
540
                    else:
541
                        TimePeriodException.objects.create(desk=self, **event)
540 542
                        total_created += 1
541 543
                else:
542 544
                    # recurring event until recurring_days in the future
......
557 559
                        if end_dt < update_datetime:
558 560
                            TimePeriodException.objects.filter(**kwargs).update(**event)
559 561
                        else:
560
                            obj, created = TimePeriodException.objects.update_or_create(defaults=event, **kwargs)
562
                            obj, created = TimePeriodException.objects.update_or_create(defaults=event, label=summary, **kwargs)
561 563
                            if created:
562 564
                                total_created += 1
563 565
                    # delete unseen occurrences
tests/test_agendas.py
243 243
    assert TimePeriodException.objects.filter(desk=desk).count() == 3
244 244
    assert set(TimePeriodException.objects.values_list('start_datetime', flat=True)) == set([
245 245
        make_aware(datetime.datetime(2018, 1, 1)), make_aware(datetime.datetime(2019, 1, 1))])
246
    assert desk.create_timeperiod_exceptions_from_ics(ICS_SAMPLE_WITH_RECURRENT_EVENT) == 0
246
    assert desk.create_timeperiod_exceptions_from_ics(ICS_SAMPLE_WITH_RECURRENT_EVENT) == 1
247 247
    # verify occurences are cleaned when count changed
248
    assert desk.create_timeperiod_exceptions_from_ics(ICS_SAMPLE_WITH_RECURRENT_EVENT_2) == 0
249
    assert TimePeriodException.objects.filter(desk=desk).count() == 2
248
    assert desk.create_timeperiod_exceptions_from_ics(ICS_SAMPLE_WITH_RECURRENT_EVENT_2) == 1
249
    assert TimePeriodException.objects.filter(desk=desk).count() == 4
250 250
    assert set(TimePeriodException.objects.values_list('start_datetime', flat=True)) == set([
251 251
        make_aware(datetime.datetime(2018, 1, 1)), make_aware(datetime.datetime(2018, 1, 2))])
252 252

  
tests/test_manager.py
987 987
DTEND:20180101
988 988
SUMMARY:New Year's Eve
989 989
END:VEVENT
990
BEGIN:VEVENT
991
DTSTART:20190101
992
DTEND:20190101
993
SUMMARY:New Year's Eve
994
END:VEVENT
990 995
END:VCALENDAR"""
991 996
    resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
992 997
    resp = resp.click('Settings')
993 998
    resp = resp.click('upload')
994 999
    resp.form['ics_file'] = Upload('exceptions.ics', ics_with_exceptions, 'text/calendar')
995 1000
    resp = resp.form.submit(status=302)
996
    assert TimePeriodException.objects.filter(desk=desk).count() == 1
1001
    assert TimePeriodException.objects.filter(desk=desk).count() == 2
1002
    assert TimePeriodException.objects.filter(desk=desk, label="New Year's Eve").count() == 2
997 1003
    resp = resp.follow()
998
    assert 'An exception has been imported.' in resp.text
1004
    assert '2 exceptions have been imported.' in resp.text
999 1005

  
1000 1006

  
1001 1007
@pytest.mark.freeze_time('2017-12-01')
1002
-