0001-manager-allow-timeperiod-exceptions-with-the-same-su.patch
chrono/agendas/models.py | ||
---|---|---|
531 | 531 |
if keep_synced_by_uid: |
532 | 532 |
kwargs['external_id'] = vevent.contents['uid'][0].value |
533 | 533 |
else: |
534 |
kwargs['label'] = summary
|
|
534 |
event['label'] = summary
|
|
535 | 535 | |
536 | 536 |
if not vevent.rruleset: |
537 | 537 |
# classical event |
538 |
obj, created = TimePeriodException.objects.update_or_create(defaults=event, **kwargs) |
|
538 |
obj, created = TimePeriodException.objects.update_or_create(defaults=event, label='', **kwargs)
|
|
539 | 539 |
if created: |
540 | 540 |
total_created += 1 |
541 | 541 |
else: |
... | ... | |
557 | 557 |
if end_dt < update_datetime: |
558 | 558 |
TimePeriodException.objects.filter(**kwargs).update(**event) |
559 | 559 |
else: |
560 |
obj, created = TimePeriodException.objects.update_or_create(defaults=event, **kwargs) |
|
560 |
obj, created = TimePeriodException.objects.update_or_create(defaults=event, label=summary, **kwargs)
|
|
561 | 561 |
if created: |
562 | 562 |
total_created += 1 |
563 | 563 |
# 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 |
- |