0001-agendas-set-proper-exception-source-when-duplicating.patch
chrono/agendas/models.py | ||
---|---|---|
1184 | 1184 |
# clone related objects |
1185 | 1185 |
for time_period in self.timeperiod_set.all(): |
1186 | 1186 |
time_period.duplicate(desk_target=new_desk) |
1187 |
for time_period_exception in self.timeperiodexception_set.all():
|
|
1187 |
for time_period_exception in self.timeperiodexception_set.filter(source__isnull=True):
|
|
1188 | 1188 |
time_period_exception.duplicate(desk_target=new_desk) |
1189 | 1189 |
for time_period_exception_source in self.timeperiodexceptionsource_set.all(): |
1190 | 1190 |
time_period_exception_source.duplicate(desk_target=new_desk) |
... | ... | |
1451 | 1451 |
new_source.ics_file.save(self.ics_filename, ics_file, save=False) |
1452 | 1452 |
# store new source |
1453 | 1453 |
new_source.save() |
1454 |
# clone related objects |
|
1455 |
for time_period_exception in self.timeperiodexception_set.all(): |
|
1456 |
time_period_exception.duplicate(desk_target=desk_target, source_target=new_source) |
|
1454 | 1457 | |
1455 | 1458 |
return new_source |
1456 | 1459 | |
... | ... | |
1620 | 1623 |
'update_datetime': export_datetime(self.update_datetime), |
1621 | 1624 |
} |
1622 | 1625 | |
1623 |
def duplicate(self, desk_target=None): |
|
1626 |
def duplicate(self, desk_target=None, source_target=None):
|
|
1624 | 1627 |
# clone current exception |
1625 | 1628 |
new_exception = copy.deepcopy(self) |
1626 | 1629 |
new_exception.pk = None |
1627 | 1630 |
# set desk |
1628 | 1631 |
new_exception.desk = desk_target or self.desk |
1632 |
# set source |
|
1633 |
new_exception.source = source_target or self.source |
|
1629 | 1634 |
# store new exception |
1630 | 1635 |
new_exception.save() |
1631 | 1636 |
tests/test_agendas.py | ||
---|---|---|
970 | 970 |
assert new_desk.slug == 'new-desk-1' |
971 | 971 | |
972 | 972 | |
973 |
def test_desk_duplicate_exception_sources(): |
|
974 |
agenda = Agenda.objects.create(label='Agenda') |
|
975 |
desk = Desk.objects.create(label='Desk', agenda=agenda) |
|
976 |
exceptions_count = desk.import_timeperiod_exceptions_from_ics_file( |
|
977 |
ContentFile(ICS_SAMPLE, name='sample.ics') |
|
978 |
) |
|
979 |
source = desk.timeperiodexceptionsource_set.get(ics_filename='sample.ics') |
|
980 |
assert exceptions_count == 2 |
|
981 |
assert TimePeriodException.objects.filter(desk=desk).count() == 2 |
|
982 | ||
983 |
new_desk = desk.duplicate(label="New Desk") |
|
984 |
new_source = new_desk.timeperiodexceptionsource_set.get(ics_filename='sample.ics') |
|
985 |
assert new_desk.timeperiodexception_set.count() == exceptions_count |
|
986 | ||
987 |
source.delete() |
|
988 |
assert new_desk.timeperiodexception_set.count() == exceptions_count |
|
989 | ||
990 |
new_source.delete() |
|
991 |
assert not new_desk.timeperiodexception_set.exists() |
|
992 | ||
993 | ||
973 | 994 |
def test_agenda_meetings_duplicate(): |
974 | 995 |
group = Group(name=u'Group') |
975 | 996 |
group.save() |
976 |
- |