Projet

Général

Profil

0001-agendas-set-proper-exception-source-when-duplicating.patch

Valentin Deniaud, 22 octobre 2020 12:46

Télécharger (3,31 ko)

Voir les différences:

Subject: [PATCH 1/3] agendas: set proper exception source when duplicating
 (#47916)

 chrono/agendas/models.py |  9 +++++++--
 tests/test_agendas.py    | 21 +++++++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)
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
-