Projet

Général

Profil

0005-agendas-desk_simple_management-in-import-export-4892.patch

Lauréline Guérin, 02 février 2021 14:32

Télécharger (5,37 ko)

Voir les différences:

Subject: [PATCH 05/11] agendas: desk_simple_management in import/export
 (#48924)

 chrono/agendas/models.py    | 11 ++++++
 tests/test_import_export.py | 67 +++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+)
chrono/agendas/models.py
324 324
        elif self.kind == 'meetings':
325 325
            agenda['meetingtypes'] = [x.export_json() for x in self.meetingtype_set.all()]
326 326
            agenda['desks'] = [desk.export_json() for desk in self.desk_set.all()]
327
            agenda['desk_simple_management'] = self.desk_simple_management
327 328
        elif self.kind == 'virtual':
328 329
            agenda['excluded_timeperiods'] = [x.export_json() for x in self.excluded_timeperiods.all()]
329 330
            agenda['real_agendas'] = [{'slug': x.slug, 'kind': x.kind} for x in self.real_agendas.all()]
......
352 353
            if resource_slug not in resources_by_slug:
353 354
                raise AgendaImportError(_('Missing "%s" resource') % resource_slug)
354 355
        data = clean_import_data(cls, data)
356
        desk_simple_management = data.pop('desk_simple_management', None)
355 357
        if data.get('category'):
356 358
            try:
357 359
                data['category'] = Category.objects.get(slug=data['category'])
......
407 409
                except ValidationError as exc:
408 410
                    raise AgendaImportError(' '.join(exc.messages))
409 411

  
412
        if data['kind'] == 'meetings' and desk_simple_management is not None:
413
            if desk_simple_management is True and not agenda.desk_simple_management:
414
                if agenda.is_available_for_simple_management():
415
                    agenda.desk_simple_management = True
416
                    agenda.save()
417
            elif desk_simple_management is False and agenda.desk_simple_management:
418
                agenda.desk_simple_management = False
419
                agenda.save()
420

  
410 421
        return created
411 422

  
412 423
    def duplicate(self, label=None):
tests/test_import_export.py
6 6
import datetime
7 7
from io import StringIO
8 8
import json
9
import mock
9 10
import os
10 11
import shutil
11 12
import sys
......
690 691
    import_site(update_payload)
691 692
    calendar.refresh_from_db()
692 693
    assert calendar.label == 'Calendar Updated'
694

  
695

  
696
@mock.patch('chrono.agendas.models.Agenda.is_available_for_simple_management')
697
def test_import_export_desk_simple_management(available_mock):
698
    agenda = Agenda.objects.create(label='Foo bar', kind='meetings', desk_simple_management=True)
699
    output = get_output_of_command('export_site')
700
    payload = json.loads(output)
701
    assert len(payload['agendas']) == 1
702
    assert payload['agendas'][0]['desk_simple_management'] is True
703

  
704
    # check on creation
705
    for available_value in [True, False]:
706
        agenda.delete()
707
        available_mock.return_value = available_value
708
        import_site(payload)
709
        agenda = Agenda.objects.latest('pk')
710
        assert agenda.desk_simple_management == available_value
711

  
712
    payload['agendas'][0]['desk_simple_management'] = False
713
    for available_value in [True, False]:
714
        # always ok to set flag to False
715
        agenda.delete()
716
        available_mock.return_value = available_value
717
        import_site(payload)
718
        agenda = Agenda.objects.latest('pk')
719
        assert agenda.desk_simple_management is False
720

  
721
    # check on update
722
    payload['agendas'][0]['desk_simple_management'] = True
723
    for available_value in [True, False]:
724
        agenda.desk_simple_management = False
725
        agenda.save()
726
        available_mock.return_value = available_value
727
        import_site(payload)
728
        agenda.refresh_from_db()
729
        assert agenda.desk_simple_management == available_value
730

  
731
        # already True, no change
732
        agenda.desk_simple_management = True
733
        agenda.save()
734
        available_mock.return_value = available_value
735
        import_site(payload)
736
        agenda.refresh_from_db()
737
        assert agenda.desk_simple_management is True
738

  
739
    payload['agendas'][0]['desk_simple_management'] = False
740
    for available_value in [True, False]:
741
        # always ok to set flag to False
742
        for old_value in [True, False]:
743
            agenda.desk_simple_management = old_value
744
            agenda.save()
745
            available_mock.return_value = available_value
746
            import_site(payload)
747
            agenda.refresh_from_db()
748
            assert agenda.desk_simple_management is False
749

  
750
    # not in payload, no changed
751
    del payload['agendas'][0]['desk_simple_management']
752
    for available_value in [True, False]:
753
        for old_value in [True, False]:
754
            agenda.desk_simple_management = old_value
755
            agenda.save()
756
            available_mock.return_value = available_value
757
            import_site(payload)
758
            agenda.refresh_from_db()
759
            assert agenda.desk_simple_management == old_value
693
-