wcs/tests/test_formdef_import.py

141 lines
5.1 KiB
Python

import sys
import shutil
import StringIO
import tempfile
import time
import xml.etree.ElementTree as ET
from quixote import cleanup
from wcs import publisher
from wcs.formdef import FormDef, fields
from qommon.misc import indent_xml as indent
def setup_module(module):
cleanup()
global pub, req
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
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]