138 lines
5.1 KiB
Python
138 lines
5.1 KiB
Python
import sys
|
|
import shutil
|
|
import StringIO
|
|
import time
|
|
import xml.etree.ElementTree as ET
|
|
|
|
from quixote import cleanup
|
|
|
|
from wcs.formdef import FormDef, fields
|
|
from qommon.misc import indent_xml as indent
|
|
|
|
from utilities import create_temporary_pub
|
|
|
|
|
|
def setup_module(module):
|
|
cleanup()
|
|
global pub
|
|
pub = create_temporary_pub()
|
|
|
|
|
|
def teardown_module(module):
|
|
shutil.rmtree(pub.APP_DIR)
|
|
|
|
def export_to_indented_xml(formdef, include_id=False):
|
|
formdef_xml = formdef.export_to_xml(include_id=include_id)
|
|
indent(formdef_xml)
|
|
return formdef_xml
|
|
|
|
def assert_compare_formdef(formdef1, formdef2, include_id=False):
|
|
assert ET.tostring(export_to_indented_xml(formdef1, include_id=include_id)) == \
|
|
ET.tostring(export_to_indented_xml(formdef2, include_id=include_id))
|
|
assert formdef1.export_to_json(include_id=include_id, indent=2) == \
|
|
formdef2.export_to_json(include_id=include_id, indent=2)
|
|
|
|
def assert_xml_import_export_works(formdef, include_id=False):
|
|
formdef2 = FormDef.import_from_xml_tree(
|
|
formdef.export_to_xml(include_id=include_id), include_id=include_id)
|
|
assert_compare_formdef(formdef, formdef2, include_id=include_id)
|
|
return formdef2
|
|
|
|
def assert_json_import_export_works(formdef, include_id=False):
|
|
formdef2 = FormDef.import_from_json(
|
|
StringIO.StringIO(formdef.export_to_json(include_id=include_id)), include_id=include_id)
|
|
assert_compare_formdef(formdef, formdef2, include_id=include_id)
|
|
return formdef2
|
|
|
|
def test_empty():
|
|
formdef = FormDef()
|
|
formdef.name = 'empty'
|
|
assert_xml_import_export_works(formdef)
|
|
assert_json_import_export_works(formdef)
|
|
|
|
def test_text_attributes():
|
|
formdef = FormDef()
|
|
formdef.name = 'Foo'
|
|
formdef.url_name = 'foo'
|
|
f2 = assert_xml_import_export_works(formdef)
|
|
assert f2.url_name == formdef.url_name
|
|
f2 = assert_json_import_export_works(formdef)
|
|
assert f2.url_name == formdef.url_name
|
|
|
|
def test_boolean_attributes():
|
|
formdef = FormDef()
|
|
formdef.name = 'Foo'
|
|
formdef.url_name = 'foo'
|
|
formdef.confirmation = True
|
|
formdef.allow_drafts = True
|
|
f2 = assert_xml_import_export_works(formdef)
|
|
assert f2.allow_drafts == formdef.allow_drafts
|
|
assert f2.confirmation == formdef.confirmation
|
|
f2 = assert_json_import_export_works(formdef)
|
|
assert f2.allow_drafts == formdef.allow_drafts
|
|
assert f2.confirmation == formdef.confirmation
|
|
|
|
def test_a_field():
|
|
formdef = FormDef()
|
|
formdef.name = 'Foo'
|
|
formdef.fields = [
|
|
fields.StringField(type='string', id=1, label='Bar', size='40')
|
|
]
|
|
f2 = assert_xml_import_export_works(formdef)
|
|
assert len(f2.fields) == len(formdef.fields)
|
|
f2 = assert_json_import_export_works(formdef)
|
|
assert len(f2.fields) == len(formdef.fields)
|
|
|
|
def test_more_fields():
|
|
formdef = FormDef()
|
|
formdef.name = 'Blah'
|
|
formdef.fields = [
|
|
fields.TextField(type='text', label='Bar', pre=True),
|
|
fields.EmailField(type='email', label='Bar'),
|
|
fields.BoolField(type='bool', label='Bar'),
|
|
fields.DateField(type='date', label='Bar', minimum_date='2014-01-01'),
|
|
fields.ItemField(type='item', label='Bar', items=['foo', 'bar', 'baz']),
|
|
]
|
|
f2 = assert_xml_import_export_works(formdef)
|
|
assert len(f2.fields) == len(formdef.fields)
|
|
assert f2.fields[2].type == formdef.fields[2].type
|
|
assert f2.fields[3].minimum_date == formdef.fields[3].minimum_date
|
|
assert f2.fields[4].items == formdef.fields[4].items
|
|
|
|
f2 = assert_json_import_export_works(formdef)
|
|
assert len(f2.fields) == len(formdef.fields)
|
|
assert f2.fields[2].type == formdef.fields[2].type
|
|
assert f2.fields[3].minimum_date == formdef.fields[3].minimum_date
|
|
assert f2.fields[4].items == formdef.fields[4].items
|
|
|
|
def test_include_id():
|
|
formdef = FormDef()
|
|
formdef.name = 'Blah'
|
|
formdef.fields = [
|
|
fields.TextField(type='text', label='Bar', pre=True),
|
|
fields.EmailField(type='email', label='Bar'),
|
|
fields.BoolField(type='bool', label='Bar'),
|
|
fields.DateField(type='date', label='Bar', minimum_date='2014-01-01'),
|
|
fields.ItemField(type='item', label='Bar', items=['foo', 'bar', 'baz']),
|
|
]
|
|
for field in formdef.fields:
|
|
field.id = formdef.get_new_field_id()
|
|
formdef.fields[4].id = '10'
|
|
f2 = assert_xml_import_export_works(formdef, include_id=True)
|
|
assert len(f2.fields) == len(formdef.fields)
|
|
assert f2.fields[0].id == formdef.fields[0].id
|
|
assert f2.fields[4].id == formdef.fields[4].id
|
|
|
|
f2 = assert_json_import_export_works(formdef, include_id=True)
|
|
assert len(f2.fields) == len(formdef.fields)
|
|
assert f2.fields[0].id == formdef.fields[0].id
|
|
assert f2.fields[4].id == formdef.fields[4].id
|
|
|
|
def test_modification_time():
|
|
formdef = FormDef()
|
|
formdef.name = 'empty'
|
|
formdef.last_modification_time = time.localtime()
|
|
assert_xml_import_export_works(formdef)
|
|
f2 = assert_json_import_export_works(formdef)
|
|
assert tuple(f2.last_modification_time)[:6] == tuple(formdef.last_modification_time)[:6]
|