Projet

Général

Profil

0002-agendas-resources-in-agendas-fields-in-import-export.patch

Lauréline Guérin, 29 mai 2020 17:10

Télécharger (3,74 ko)

Voir les différences:

Subject: [PATCH 2/8] agendas: resources in agendas fields in import/exports
 (#38942)

 chrono/agendas/models.py    |  7 +++++++
 tests/test_import_export.py | 27 ++++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)
chrono/agendas/models.py
231 231
                'view': self.view_role.name if self.view_role else None,
232 232
                'edit': self.edit_role.name if self.edit_role else None,
233 233
            },
234
            'resources': [x.slug for x in self.resources.all()],
234 235
        }
235 236
        if self.kind == 'events':
236 237
            agenda['events'] = [x.export_json() for x in self.event_set.all()]
......
260 261
                    data[permission + '_role'] = Group.objects.get(name=permissions[permission])
261 262
                except Group.DoesNotExist:
262 263
                    raise AgendaImportError(_('Missing "%s" role') % permissions[permission])
264
        resources_slug = data.pop('resources', [])
265
        resources_by_slug = {r.slug: r for r in Resource.objects.filter(slug__in=resources_slug)}
266
        for resource_slug in resources_slug:
267
            if resource_slug not in resources_by_slug:
268
                raise AgendaImportError(_('Missing "%s" resource') % resource_slug)
263 269
        data = clean_import_data(cls, data)
264 270
        agenda, created = cls.objects.get_or_create(slug=data['slug'], defaults=data)
265 271
        if not created:
......
281 287
            for desk in desks:
282 288
                desk['agenda'] = agenda
283 289
                Desk.import_json(desk).save()
290
            agenda.resources.set(resources_by_slug.values())
284 291
        elif data['kind'] == 'virtual':
285 292
            if overwrite:
286 293
                TimePeriod.objects.filter(agenda=agenda).delete()
tests/test_import_export.py
18 18

  
19 19
from chrono.agendas.models import (
20 20
    Agenda,
21
    Desk,
21 22
    Event,
23
    Resource,
22 24
    TimePeriod,
23
    Desk,
24 25
    TimePeriodException,
25 26
    AgendaImportError,
26 27
    MeetingType,
......
192 193
    assert agenda.edit_role == group2
193 194

  
194 195

  
196
def test_import_export_resources(app, some_data, meetings_agenda):
197
    resource = Resource.objects.create(label='foo')
198
    meetings_agenda.resources.add(resource)
199
    output = get_output_of_command('export_site')
200

  
201
    import_site(data={}, clean=True)
202
    assert Agenda.objects.count() == 0
203
    resource.delete()
204

  
205
    with pytest.raises(AgendaImportError) as excinfo:
206
        import_site(json.loads(output), overwrite=True)
207
    assert str(excinfo.value) == 'Missing "foo" resource'
208

  
209
    resource = Resource.objects.create(label='foobar')
210
    with pytest.raises(AgendaImportError) as excinfo:
211
        import_site(json.loads(output), overwrite=True)
212
    assert str(excinfo.value) == 'Missing "foo" resource'
213

  
214
    resource = Resource.objects.create(label='foo')
215
    import_site(json.loads(output), overwrite=True)
216
    agenda = Agenda.objects.get(slug=meetings_agenda.slug)
217
    assert list(agenda.resources.all()) == [resource]
218

  
219

  
195 220
def test_import_export_virtual_agenda(app):
196 221
    virtual_agenda = Agenda.objects.create(label='Virtual Agenda', kind='virtual')
197 222
    output = get_output_of_command('export_site')
198
-