wcs/tests/test_formdef_import.py

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]