Projet

Général

Profil

0001-agendas-use-update_or_create-on-TimePeriod-and-TimeP.patch

Emmanuel Cazenave, 30 octobre 2020 15:15

Télécharger (2,93 ko)

Voir les différences:

Subject: [PATCH] agendas: use update_or_create on TimePeriod and
 TimePeriodException import (#48095)

 chrono/agendas/models.py    |  8 ++++----
 tests/test_import_export.py | 29 +++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 4 deletions(-)
chrono/agendas/models.py
609 609
    @classmethod
610 610
    def import_json(cls, data):
611 611
        data = clean_import_data(cls, data)
612
        timeperiod = cls(**data)
613
        timeperiod.save()
612
        timeperiod, _ = cls.objects.update_or_create(defaults=data, **data)
614 613
        return timeperiod
615 614

  
616 615
    def export_json(self):
......
1631 1630
            if k.endswith('_datetime'):
1632 1631
                data[k] = import_datetime(v)
1633 1632
        data = clean_import_data(cls, data)
1634
        exception = cls(**data)
1635
        exception.save()
1633
        query_data = data.copy()
1634
        query_data.pop('update_datetime')
1635
        exception, _ = cls.objects.update_or_create(defaults=data, **query_data)
1636 1636
        return exception
1637 1637

  
1638 1638
    def export_json(self):
tests/test_import_export.py
565 565
    source = desk.timeperiodexceptionsource_set.first()
566 566
    assert not source.enabled
567 567
    assert not desk.timeperiodexception_set.exists()
568

  
569

  
570
def test_import_export_do_not_duplicate_timeperiod_and_exceptions():
571
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
572
    desk = Desk.objects.create(slug='test', agenda=agenda)
573
    TimePeriod.objects.create(
574
        desk=desk, weekday=2, start_time=datetime.time(10, 0), end_time=datetime.time(11, 0)
575
    )
576
    TimePeriod.objects.create(
577
        desk=desk, weekday=3, start_time=datetime.time(10, 0), end_time=datetime.time(11, 0)
578
    )
579
    TimePeriodException.objects.create(
580
        desk=desk,
581
        start_datetime=make_aware(datetime.datetime(2017, 5, 22, 8, 0)),
582
        end_datetime=make_aware(datetime.datetime(2017, 5, 22, 12, 30)),
583
    )
584
    TimePeriodException.objects.create(
585
        desk=desk,
586
        start_datetime=make_aware(datetime.datetime(2017, 6, 22, 8, 0)),
587
        end_datetime=make_aware(datetime.datetime(2017, 6, 22, 12, 30)),
588
    )
589
    assert TimePeriod.objects.count() == 2
590
    assert TimePeriodException.objects.count() == 2
591
    output = get_output_of_command('export_site')
592
    payload = json.loads(output)
593
    import_site(payload)
594

  
595
    assert TimePeriod.objects.count() == 2
596
    assert TimePeriodException.objects.count() == 2
568
-