Projet

Général

Profil

0002-agendas-move-desk-settings-exceptions-import-to-view.patch

Valentin Deniaud, 27 octobre 2020 11:39

Télécharger (7,32 ko)

Voir les différences:

Subject: [PATCH 2/3] agendas: move desk settings exceptions import to view
 (#47966)

 chrono/agendas/models.py |  7 ++-----
 chrono/manager/views.py  |  6 ++++++
 tests/test_agendas.py    | 13 ++++++++-----
 tests/test_manager.py    | 37 ++++++++++++++++++++++++++++++++++++-
 4 files changed, 52 insertions(+), 11 deletions(-)
chrono/agendas/models.py
1132 1132
        ordering = ['label']
1133 1133
        unique_together = ['agenda', 'slug']
1134 1134

  
1135
    def save(self, *args, import_exceptions=True, **kwargs):
1135
    def save(self, *args, **kwargs):
1136 1136
        assert self.agenda.kind != 'virtual', "a desk can't reference a virtual agenda"
1137
        first_created = not self.pk
1138 1137
        if not self.slug:
1139 1138
            self.slug = generate_slug(self, agenda=self.agenda)
1140 1139
        super(Desk, self).save(*args, **kwargs)
1141
        if first_created and import_exceptions:
1142
            self.import_timeperiod_exceptions_from_settings(enable=True)
1143 1140

  
1144 1141
    @property
1145 1142
    def base_slug(self):
......
1179 1176
        if agenda_target:
1180 1177
            new_desk.agenda = agenda_target
1181 1178
        # store new desk
1182
        new_desk.save(import_exceptions=False)
1179
        new_desk.save()
1183 1180

  
1184 1181
        # clone related objects
1185 1182
        for time_period in self.timeperiod_set.all():
chrono/manager/views.py
582 582
        if self.object.kind == 'meetings':
583 583
            default_desk = Desk(agenda=self.object, label=_('Desk 1'))
584 584
            default_desk.save()
585
            default_desk.import_timeperiod_exceptions_from_settings(enable=True)
585 586
        return model_form
586 587

  
587 588
    def get_success_url(self):
......
1797 1798
    model = Desk
1798 1799
    form_class = NewDeskForm
1799 1800

  
1801
    def form_valid(self, form):
1802
        self.object = form.save()
1803
        self.object.import_timeperiod_exceptions_from_settings(enable=True)
1804
        return HttpResponseRedirect(self.get_success_url())
1805

  
1800 1806

  
1801 1807
agenda_add_desk = AgendaAddDesk.as_view()
1802 1808

  
tests/test_agendas.py
525 525
    agenda.save()
526 526
    desk = Desk(label='Test 1 desk', agenda=agenda)
527 527
    desk.save()
528
    desk.import_timeperiod_exceptions_from_settings(enable=True)
528 529

  
529
    # first save automatically load exceptions
530 530
    source = TimePeriodExceptionSource.objects.get(desk=desk)
531 531
    assert source.settings_slug == 'holidays'
532 532
    assert source.enabled
......
555 555
    }
556 556
    agenda = Agenda(label=u'Test 1 agenda')
557 557
    agenda.save()
558

  
558 559
    desk1 = Desk(label='Test 1 desk', agenda=agenda)
559 560
    desk1.save()
561
    assert not TimePeriodExceptionSource.objects.filter(desk=desk1).exists()
562

  
560 563
    with override_settings(**setting):
561 564
        desk2 = Desk(label='Test 2 desk', agenda=agenda)
562 565
        desk2.save()
566
        desk2.import_timeperiod_exceptions_from_settings(enable=True)
563 567
        desk3 = Desk(label='Test 3 desk', agenda=agenda)
564 568
        desk3.save()
565
        source3 = TimePeriodExceptionSource.objects.get(desk=desk3)
566
        source3.disable()
567

  
569
        desk3.import_timeperiod_exceptions_from_settings(enable=False)
568 570
        call_command('sync_desks_timeperiod_exceptions_from_settings')
569 571
    assert not TimePeriodExceptionSource.objects.get(desk=desk1).enabled
570 572
    source2 = TimePeriodExceptionSource.objects.get(desk=desk2)
571 573
    assert source2.enabled
572
    source3.refresh_from_db()
574
    source3 = TimePeriodExceptionSource.objects.get(desk=desk3)
573 575
    assert not source3.enabled
574 576

  
575 577
    exceptions_count = source2.timeperiodexception_set.count()
......
997 999
def test_desk_duplicate_exception_source_from_settings():
998 1000
    agenda = Agenda.objects.create(label='Agenda')
999 1001
    desk = Desk.objects.create(label='Desk', agenda=agenda)
1002
    desk.import_timeperiod_exceptions_from_settings(enable=True)
1000 1003

  
1001 1004
    source = desk.timeperiodexceptionsource_set.get(settings_slug='holidays')
1002 1005
    assert source.enabled
tests/test_manager.py
872 872
    assert agenda.maximal_booking_delay == 56
873 873

  
874 874

  
875
@override_settings(
876
    EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},}
877
)
878
def test_add_agenda_exceptions_from_settings(app, admin_user):
879
    app = login(app)
880
    resp = app.get('/manage/', status=200)
881
    resp = resp.click('New')
882
    resp.form['label'] = 'Foo bar'
883
    resp.form['kind'] = 'meetings'
884
    resp = resp.form.submit().follow()
885

  
886
    agenda = Agenda.objects.get(label='Foo bar')
887
    assert agenda.desk_set.count() == 1
888

  
889
    default_desk = agenda.desk_set.first()
890
    assert default_desk.timeperiodexception_set.exists()
891
    assert default_desk.timeperiodexceptionsource_set.count() == 1
892

  
893
    source = default_desk.timeperiodexceptionsource_set.first()
894
    assert source.enabled
895

  
896
    resp = resp.click('New Desk')
897
    resp.form['label'] = 'Desk A'
898
    resp = resp.form.submit().follow()
899

  
900
    desk = Desk.objects.get(slug='desk-a')
901
    assert desk.timeperiodexception_set.exists()
902
    assert desk.timeperiodexceptionsource_set.count() == 1
903

  
904
    source = desk.timeperiodexceptionsource_set.first()
905
    assert source.enabled
906

  
907

  
875 908
def test_add_agenda_as_manager(app, manager_user):
876 909
    # open /manage/ access to manager_user, and check agenda creation is not
877 910
    # allowed.
......
2676 2709
def test_meetings_agenda_time_period_exception_source_from_settings(app, admin_user):
2677 2710
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
2678 2711
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
2712
    desk.import_timeperiod_exceptions_from_settings(enable=True)
2679 2713
    MeetingType(agenda=agenda, label='Blah').save()
2680 2714
    TimePeriod.objects.create(
2681 2715
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
......
2725 2759
@override_settings(
2726 2760
    EXCEPTIONS_SOURCES={'holidays': {'class': 'workalendar.europe.France', 'label': 'Holidays'},}
2727 2761
)
2728
def test_meetings_agenda_time_period_exception_source_external(app, admin_user, freezer):
2762
def test_meetings_agenda_time_period_exception_source_from_settings(app, admin_user, freezer):
2729 2763
    freezer.move_to('2020-01-01')
2730 2764
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
2731 2765
    desk = Desk.objects.create(agenda=agenda, label='Desk A')
2766
    desk.import_timeperiod_exceptions_from_settings(enable=True)
2732 2767
    MeetingType(agenda=agenda, label='Blah').save()
2733 2768
    TimePeriod.objects.create(
2734 2769
        weekday=1, desk=desk, start_time=datetime.time(10, 0), end_time=datetime.time(12, 0)
2735
-