From 246d03f7efdd79123f8baa0b9298542b2f793ebc Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 2 Feb 2016 19:16:43 +0100 Subject: [PATCH 2/2] export workflow in formdef json exports (fixes #9849) --- help/fr/api-schema.page | 21 ++++++++++++++++++++- tests/test_api.py | 23 +++++++++++++++++++++++ wcs/formdef.py | 13 ++++++++++--- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/help/fr/api-schema.page b/help/fr/api-schema.page index f6b2bfe..ac0695d 100644 --- a/help/fr/api-schema.page +++ b/help/fr/api-schema.page @@ -181,7 +181,26 @@ Le schéma de données d'un formulaire est accessible à l'adresse "type": "email", "varname": "email" } - ] + ], + "workflow": { + "name": "Workflow Newsletter", + "id": "1", + "last_modification_time": "2015-12-12T10:20:45", + "statuses": { + "1": { + "name": "Nouveau", + "forced_endpoint": false + }, + "2": { + "name": "En cours", + "forced_endpoint": false + }, + "3": { + "name": "Terminé", + "forced_endpoint": false + } + } + } } diff --git a/tests/test_api.py b/tests/test_api.py index 2222cdd..b3cdf05 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -8,6 +8,7 @@ import urllib import urlparse import datetime import time +import json from quixote import cleanup, get_publisher from wcs.qommon.http_request import HTTPRequest @@ -333,20 +334,42 @@ def test_formdef_list_redirection(pub): assert resp1.json[0]['count'] == 0 assert resp1.json[0]['redirection'] == True + def test_formdef_schema(pub): + Workflow.wipe() + workflow = Workflow(name='test') + workflow.add_status('Status1', 'st1') + workflow.add_status('Status2', 'st2') + workflow.store() FormDef.wipe() formdef = FormDef() formdef.name = 'test' formdef.fields = [fields.StringField(id='0', label='foobar')] + formdef.workflow_id = workflow.id formdef.store() resp = get_app(pub).get('/api/formdefs/test/schema') resp2 = get_app(pub).get('/test/schema') + + # check schema assert resp.json == resp2.json + assert set(resp.json.keys()) >= set(['enable_tracking_codes', 'url_name', 'description', + 'workflow', 'expiration_date', 'discussion', + 'last_modification_time', 'has_captcha', + 'always_advertise', 'name', 'disabled', 'only_allow_one', + 'private_status_and_history', 'fields', 'keywords', + 'publication_date', 'detailed_emails', + 'disabled_redirection']) assert resp.json['name'] == 'test' + + # fields checks assert resp.json['fields'][0]['label'] == 'foobar' assert resp.json['fields'][0]['type'] == 'string' + # workflow checks + assert len(resp.json['workflow']['statuses']) == 2 + + def test_formdef_submit(pub, local_user): Role.wipe() role = Role(name='test') diff --git a/wcs/formdef.py b/wcs/formdef.py index 4d32186..b7e0579 100644 --- a/wcs/formdef.py +++ b/wcs/formdef.py @@ -523,8 +523,7 @@ class FormDef(StorableObject): root['category'] = unicode(self.category.name, charset) root['category_id'] = str(self.category.id) if self.workflow: - root['workflow'] = unicode(self.workflow.name, charset) - root['workflow_id'] = str(self.workflow.id) + root['workflow'] = self.workflow.get_json_export_dict(include_id=include_id) if self.max_field_id is None and self.fields: self.max_field_id = max([lax_int(x.id) for x in self.fields]) @@ -588,8 +587,16 @@ class FormDef(StorableObject): if include_id and 'workflow_id' in value: formdef.workflow_id = value.get('workflow_id') + elif (include_id + and 'workflow' in value + and isinstance(value['workflow'], dict) + and 'id' in value['workflow']): + formdef.workflow_id = value['workflow'].get('id') elif 'workflow' in value: - workflow = value.get('workflow') + if isinstance(value['workflow'], basestring): + workflow = value.get('workflow') + else: + workflow = value['workflow'].get('name') from wcs.workflows import Workflow for w in Workflow.select(): if w.name == workflow: -- 2.1.4