0001-carddefs-check-on-form-import-if-carddef-exists-4257.patch
tests/test_admin_pages.py | ||
---|---|---|
4630 | 4630 |
formdef.roles = [role.id] |
4631 | 4631 |
formdef.backoffice_submission_roles = [role.id] |
4632 | 4632 |
formdef.workflow_roles = {'_receiver': role.id} |
4633 |
formdef.fields = [fields.StringField( |
|
4634 |
id='1', type='string', |
|
4635 |
data_source={'type': 'carddef:unknown'})] |
|
4633 | 4636 |
formdef.store() |
4634 | 4637 | |
4635 | 4638 |
resp = app.get('/backoffice/settings/export') |
... | ... | |
4666 | 4669 |
assert FormDef.select()[0].roles == ['012345'] |
4667 | 4670 |
assert FormDef.select()[0].backoffice_submission_roles == ['012345'] |
4668 | 4671 |
assert FormDef.select()[0].workflow_roles == {'_receiver': '012345'} |
4672 |
assert len(FormDef.select()[0].fields) == 1 |
|
4669 | 4673 |
assert Workflow.select()[0].possible_status[0].items[0].by == ['012345'] |
4670 | 4674 | |
4671 | 4675 |
# do not export roles when managed by idp |
tests/test_formdef_import.py | ||
---|---|---|
1 | 1 |
# -*- coding: utf-8 -*- |
2 | 2 | |
3 | 3 |
import pytest |
4 |
import sys |
|
5 | 4 |
import shutil |
6 | 5 |
import time |
7 | 6 |
import xml.etree.ElementTree as ET |
... | ... | |
10 | 9 |
from quixote import cleanup |
11 | 10 | |
12 | 11 |
from wcs.categories import Category |
12 |
from wcs.carddef import CardDef |
|
13 | 13 |
from wcs.formdef import FormDef, fields, FormdefImportError |
14 | 14 |
from wcs.workflows import Workflow |
15 | 15 |
from wcs.roles import Role |
... | ... | |
346 | 346 |
def test_unknown_data_source(): |
347 | 347 |
formdef = FormDef() |
348 | 348 |
formdef.name = 'foo' |
349 |
formdef.fields = [fields.StringField(id='1', type='string', |
|
349 |
formdef.fields = [fields.StringField( |
|
350 |
id='1', type='string', |
|
350 | 351 |
data_source={'type': 'json', 'value': 'http://example.net'})] |
351 | 352 |
export = ET.tostring(export_to_indented_xml(formdef)) |
352 | 353 | |
353 | 354 |
FormDef.import_from_xml(BytesIO(export)) |
354 | 355 | |
355 |
formdef.fields = [fields.StringField(id='1', type='string', |
|
356 |
formdef.fields = [fields.StringField( |
|
357 |
id='1', type='string', |
|
356 | 358 |
data_source={'type': 'foobar'})] |
357 | 359 |
export = ET.tostring(export_to_indented_xml(formdef)) |
360 |
with pytest.raises(FormdefImportError, match='Unknown datasources'): |
|
361 |
FormDef.import_from_xml(BytesIO(export)) |
|
362 | ||
363 |
carddef = CardDef() |
|
364 |
carddef.name = 'foo' |
|
365 |
carddef.fields = [ |
|
366 |
fields.StringField(id='1', label='Test', type='string', varname='foo'), |
|
367 |
] |
|
368 |
carddef.store() |
|
369 | ||
370 |
formdef.fields = [fields.StringField( |
|
371 |
id='1', type='string', |
|
372 |
data_source={'type': 'carddef:foo'})] |
|
373 |
export = ET.tostring(export_to_indented_xml(formdef)) |
|
374 |
FormDef.import_from_xml(BytesIO(export)) |
|
375 | ||
376 |
formdef.fields = [fields.StringField( |
|
377 |
id='1', type='string', |
|
378 |
data_source={'type': 'carddef:unknown'})] |
|
379 |
export = ET.tostring(export_to_indented_xml(formdef)) |
|
358 | 380 |
with pytest.raises(FormdefImportError): |
359 | 381 |
FormDef.import_from_xml(BytesIO(export)) |
360 | 382 |
wcs/formdef.py | ||
---|---|---|
1009 | 1009 |
@classmethod |
1010 | 1010 |
def import_from_xml(cls, fd, charset=None, include_id=False, |
1011 | 1011 |
fix_on_error=False, check_datasources=True): |
1012 |
from wcs.carddef import CardDef |
|
1012 | 1013 |
try: |
1013 | 1014 |
tree = ET.parse(fd) |
1014 | 1015 |
except: |
... | ... | |
1039 | 1040 |
if isinstance(data_sources.get_object(data_source), |
1040 | 1041 |
data_sources.StubNamedDataSource): |
1041 | 1042 |
unknown_datasources.add(data_source.get('type')) |
1043 |
elif data_source.get('type') and data_source.get('type').startswith('carddef:'): |
|
1044 |
# check if carddef exists |
|
1045 |
try: |
|
1046 |
CardDef.get_by_urlname(data_source['type'][8:]) |
|
1047 |
except KeyError: |
|
1048 |
unknown_datasources.add(data_source.get('type')) |
|
1042 | 1049 |
if unknown_datasources: |
1043 | 1050 |
raise FormdefImportError(N_('Unknown datasources'), |
1044 | 1051 |
details=', '.join(sorted(unknown_datasources))) |
1045 |
- |