0001-forms-include-functions-in-XML-export-10650.patch
tests/test_formdef_import.py | ||
---|---|---|
12 | 12 |
from wcs.categories import Category |
13 | 13 |
from wcs.formdef import FormDef, fields, FormdefImportError |
14 | 14 |
from wcs.workflows import Workflow |
15 |
from wcs.roles import Role |
|
15 | 16 |
from qommon.misc import indent_xml as indent |
16 | 17 | |
17 | 18 |
from utilities import create_temporary_pub |
... | ... | |
308 | 309 |
fd2 = assert_xml_import_export_works(formdef) |
309 | 310 |
assert fd2.fields[0].type == 'page' |
310 | 311 |
assert fd2.fields[0].post_conditions == formdef.fields[0].post_conditions |
312 | ||
313 |
def test_workflow_roles(): |
|
314 |
Role.wipe() |
|
315 |
role = Role(name='blah') |
|
316 |
role.store() |
|
317 | ||
318 |
formdef = FormDef() |
|
319 |
formdef.name = 'foo' |
|
320 |
formdef.fields = [] |
|
321 |
formdef.workflow_roles = {'_receiver': role.id} |
|
322 |
fd2 = assert_xml_import_export_works(formdef, include_id=True) |
|
323 |
assert fd2.workflow_roles.get('_receiver') == role.id |
|
324 | ||
325 |
fd2 = assert_xml_import_export_works(formdef, include_id=False) |
|
326 |
assert fd2.workflow_roles.get('_receiver') == role.id |
|
327 | ||
328 |
xml_export = export_to_indented_xml(formdef, include_id=True) |
|
329 |
xml_export_no_id = export_to_indented_xml(formdef, include_id=False) |
|
330 | ||
331 |
# same id, different name |
|
332 |
role.name = 'blah 2' |
|
333 |
role.store() |
|
334 | ||
335 |
fd2 = FormDef.import_from_xml_tree(xml_export, include_id=True) |
|
336 |
assert fd2.workflow_roles.get('_receiver') == role.id |
|
337 |
fd2 = FormDef.import_from_xml_tree(xml_export, include_id=False) |
|
338 |
assert fd2.workflow_roles.get('_receiver') is None |
|
339 | ||
340 |
role.remove_self() |
|
341 |
fd2 = FormDef.import_from_xml_tree(xml_export, include_id=True) |
|
342 |
assert fd2.workflow_roles.get('_receiver') is None |
wcs/formdef.py | ||
---|---|---|
31 | 31 |
from qommon.publisher import get_publisher_class |
32 | 32 | |
33 | 33 |
from formdata import FormData |
34 |
from roles import logged_users_role |
|
34 |
from roles import Role, logged_users_role
|
|
35 | 35 |
from categories import Category |
36 | 36 |
import fields |
37 | 37 |
import data_sources |
... | ... | |
675 | 675 |
for field in self.fields or []: |
676 | 676 |
fields.append(field.export_to_xml(charset=charset, include_id=include_id)) |
677 | 677 | |
678 |
if self.workflow_roles: |
|
679 |
roles = ET.SubElement(root, 'roles') |
|
680 |
for role_key, role_id in self.workflow_roles.items(): |
|
681 |
if role_id is None: |
|
682 |
continue |
|
683 |
role_id = str(role_id) |
|
684 |
if role_id.startswith('_') or role_id == 'logged-users': |
|
685 |
role = unicode(role_id, charset) |
|
686 |
else: |
|
687 |
try: |
|
688 |
role = unicode(Role.get(role_id).name, charset) |
|
689 |
except KeyError: |
|
690 |
role = unicode(role_id, charset) |
|
691 |
sub = ET.SubElement(roles, 'role') |
|
692 |
sub.attrib['role_key'] = role_key |
|
693 |
if include_id: |
|
694 |
sub.attrib['role_id'] = role_id |
|
695 |
sub.text = role |
|
696 | ||
678 | 697 |
options = ET.SubElement(root, 'options') |
679 | 698 |
for option in self.workflow_options or []: |
680 | 699 |
element = ET.SubElement(options, 'option') |
... | ... | |
813 | 832 |
formdef.workflow_id = w.id |
814 | 833 |
break |
815 | 834 | |
835 |
if tree.find('roles') is not None: |
|
836 |
roles_node = tree.find('roles') |
|
837 |
formdef.workflow_roles = {} |
|
838 |
for child in roles_node.getchildren(): |
|
839 |
role_key = child.attrib['role_key'] |
|
840 |
role_id = None |
|
841 |
value = child.text.encode(charset) |
|
842 |
if value.startswith('_') or value == 'logged-users': |
|
843 |
role_id = value |
|
844 |
elif include_id: |
|
845 |
role_id = child.attrib.get('role_id') |
|
846 |
else: |
|
847 |
for role in Role.select(ignore_errors=True): |
|
848 |
if role.name == value: |
|
849 |
role_id = role.id |
|
850 |
break |
|
851 | ||
852 |
if role_id and not Role.has_key(role_id): |
|
853 |
role_id = None |
|
854 | ||
855 |
formdef.workflow_roles[role_key] = role_id |
|
856 | ||
816 | 857 |
return formdef |
817 | 858 | |
818 | 859 |
def get_detailed_email_form(self, formdata, url): |
819 |
- |