formdef: use custom json encoder for schema export (#11088)

This commit is contained in:
Frédéric Péters 2016-06-17 20:14:26 +02:00
parent 546235bb02
commit 88380bc58e
3 changed files with 31 additions and 2 deletions

View File

@ -558,6 +558,17 @@ def test_form_workflow_variables(pub):
resp = resp.forms[0].submit('cancel')
assert resp.location == 'http://example.net/backoffice/forms/1/'
# check with a date field
workflow.variables_formdef.fields.append(
fields.DateField(id='2', varname='test2', label='Test2', type='date'))
workflow.store()
resp = app.get('/backoffice/forms/1/')
resp = resp.click(href='workflow-variables')
resp.form['f2'] = '2016-06-17'
resp = resp.form.submit()
assert time.strftime('%d %m %y', FormDef.get(formdef.id).workflow_options.get('test2')) == '17 06 16'
def test_form_roles(pub):
create_superuser(pub)
role = create_role()

View File

@ -1,6 +1,8 @@
import datetime
import json
import sys
import shutil
import time
import pytest
@ -10,7 +12,7 @@ from quixote import cleanup
from wcs import formdef
from wcs.formdef import FormDef
from wcs.workflows import Workflow
from wcs.fields import StringField, FileField
from wcs.fields import StringField, FileField, DateField
from utilities import create_temporary_pub
@ -115,6 +117,22 @@ def test_substitution_variables():
assert 'form_option_foo' in formdef.get_substitution_variables()
assert formdef.get_substitution_variables()['form_option_foo'] == 'bar'
def test_schema_with_date_variable():
FormDef.wipe()
formdef = FormDef()
formdef.name = 'foo'
formdef.store()
from wcs.workflows import WorkflowVariablesFieldsFormDef
wf = Workflow(name='variables')
wf.variables_formdef = WorkflowVariablesFieldsFormDef(workflow=wf)
wf.variables_formdef.fields.append(
DateField(label='Test', type='date', varname='foo'))
wf.store()
formdef.workflow_id = wf.id
formdef.workflow_options = {'foo': time.gmtime(time.mktime((2016, 4, 2, 0, 0, 0, 0, 0, 0)))}
assert json.loads(formdef.export_to_json())['options']['foo'].startswith('2016-04')
def test_substitution_variables_object():
formdef = FormDef()
formdef.name = 'foo'

View File

@ -557,7 +557,7 @@ class FormDef(StorableObject):
if self.workflow_options:
root['options'] = self.workflow_options
return json.dumps(root, indent=indent)
return json.dumps(root, indent=indent, cls=misc.JSONEncoder)
@classmethod
def import_from_json(cls, fd, charset=None, include_id=False):