189 lines
6.2 KiB
Python
189 lines
6.2 KiB
Python
import pytest
|
|
import sys
|
|
import shutil
|
|
import time
|
|
|
|
from quixote import cleanup
|
|
from quixote.http_request import Upload
|
|
from wcs.qommon.http_request import HTTPRequest
|
|
from wcs import fields, formdef
|
|
from wcs.formdef import FormDef
|
|
from wcs.formdata import Evolution
|
|
|
|
from utilities import create_temporary_pub, clean_temporary_pub
|
|
|
|
def pytest_generate_tests(metafunc):
|
|
if 'pub' in metafunc.fixturenames:
|
|
metafunc.parametrize('pub', ['pickle', 'sql'], indirect=True)
|
|
|
|
@pytest.fixture
|
|
def pub(request):
|
|
pub = create_temporary_pub(sql_mode=(request.param == 'sql'))
|
|
|
|
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
|
|
pub.set_app_dir(req)
|
|
pub.cfg['identification'] = {'methods': ['password']}
|
|
pub.cfg['language'] = {'language': 'en'}
|
|
pub.write_cfg()
|
|
|
|
FormDef.wipe()
|
|
|
|
global formdef
|
|
formdef = FormDef()
|
|
formdef.name = 'foobar'
|
|
formdef.url_name = 'foobar'
|
|
formdef.fields = []
|
|
formdef.store()
|
|
|
|
return pub
|
|
|
|
|
|
def teardown_module(module):
|
|
clean_temporary_pub()
|
|
|
|
|
|
def test_basic(pub):
|
|
formdata = formdef.data_class()()
|
|
substvars = formdata.get_substitution_variables()
|
|
assert substvars.get('form_status') == 'Unknown'
|
|
assert substvars.get('form_name') == 'foobar'
|
|
|
|
def test_saved(pub):
|
|
formdef.data_class().wipe()
|
|
formdata = formdef.data_class()()
|
|
formdata.store()
|
|
substvars = formdata.get_substitution_variables()
|
|
assert substvars.get('form_number') == '1'
|
|
assert substvars.get('form_number_raw') == '1'
|
|
assert substvars.get('form_url').endswith('/foobar/1/')
|
|
assert substvars.get('form_url_backoffice').endswith('/backoffice/management/foobar/1/')
|
|
assert substvars.get('form_status_url').endswith('/foobar/1/status')
|
|
|
|
def test_display_id(pub):
|
|
formdef.data_class().wipe()
|
|
formdata = formdef.data_class()()
|
|
formdata.id_display = 'bar'
|
|
formdata.store()
|
|
substvars = formdata.get_substitution_variables()
|
|
assert substvars.get('form_number') == 'bar'
|
|
assert substvars.get('form_number_raw') == str(formdata.id)
|
|
|
|
def test_just_created(pub):
|
|
formdef.data_class().wipe()
|
|
formdata = formdef.data_class()()
|
|
formdata.just_created()
|
|
formdata.store()
|
|
substvars = formdata.get_substitution_variables()
|
|
assert substvars.get('form_status') == 'Just Submitted'
|
|
assert substvars.get('form_status_is_endpoint') == False
|
|
assert substvars.get('form_receipt_date')
|
|
assert substvars.get('form_receipt_time')
|
|
assert substvars.get('form_evolution')
|
|
|
|
def test_field(pub):
|
|
formdef.data_class().wipe()
|
|
formdef.fields = [fields.StringField(id='0', label='string')]
|
|
formdef.store()
|
|
formdata = formdef.data_class()()
|
|
substvars = formdata.get_substitution_variables()
|
|
assert 'form_f0' in substvars
|
|
assert not substvars.get('form_f0')
|
|
|
|
formdata.data = {'0': 'test'}
|
|
substvars = formdata.get_substitution_variables()
|
|
assert substvars.get('form_f0') == 'test'
|
|
assert substvars.get('form_field_string') == 'test'
|
|
|
|
def test_field_varname(pub):
|
|
formdef.data_class().wipe()
|
|
formdef.fields = [fields.StringField(id='0', label='string', varname='foo')]
|
|
formdef.store()
|
|
formdata = formdef.data_class()()
|
|
formdata.data = {'0': 'test'}
|
|
substvars = formdata.get_substitution_variables()
|
|
assert substvars.get('form_f0') == 'test'
|
|
assert substvars.get('form_var_foo') == 'test'
|
|
|
|
def test_file_field(pub):
|
|
formdef.data_class().wipe()
|
|
formdef.fields = [fields.FileField(id='0', label='file', varname='foo')]
|
|
formdef.store()
|
|
formdata = formdef.data_class()()
|
|
upload = Upload('test.txt', 'text/plain', 'ascii')
|
|
upload.receive(['first line', 'second line'])
|
|
formdata.data = {'0': upload}
|
|
formdata.id = 1
|
|
substvars = formdata.get_substitution_variables()
|
|
assert substvars.get('form_var_foo') == 'test.txt'
|
|
assert substvars.get('form_var_foo_url').endswith('/foobar/1/download?f=0')
|
|
assert isinstance(substvars.get('form_var_foo_raw'), Upload)
|
|
|
|
def test_get_submitter(pub):
|
|
formdef.data_class().wipe()
|
|
formdef.fields = [fields.StringField(id='0', label='email', varname='foo',
|
|
prefill={'type': 'user', 'value': 'email'})]
|
|
formdef.store()
|
|
|
|
formdata = formdef.data_class()()
|
|
assert formdef.get_submitter_email(formdata) is None
|
|
formdata.data = {'0': 'foo@localhost'}
|
|
assert formdef.get_submitter_email(formdata) == 'foo@localhost'
|
|
|
|
user = pub.user_class()
|
|
user.email = 'bar@localhost'
|
|
user.store()
|
|
|
|
formdata.user_id = user.id
|
|
assert formdef.get_submitter_email(formdata) == 'bar@localhost'
|
|
|
|
def test_get_last_update_time(pub):
|
|
formdef.data_class().wipe()
|
|
formdef.store()
|
|
|
|
formdata = formdef.data_class()()
|
|
assert formdata.last_update_time is None
|
|
|
|
formdata.just_created()
|
|
assert formdata.last_update_time == formdata.evolution[-1].time
|
|
|
|
time.sleep(1)
|
|
evo = Evolution()
|
|
evo.time = time.localtime()
|
|
evo.status = formdata.status
|
|
evo.comment = 'hello world'
|
|
formdata.evolution.append(evo)
|
|
assert formdata.last_update_time != formdata.receipt_time
|
|
assert formdata.last_update_time == formdata.evolution[-1].time
|
|
|
|
# check with missing 'evolution' values
|
|
formdata.evolution = None
|
|
assert formdata.last_update_time == formdata.receipt_time
|
|
|
|
def test_password_field(pub):
|
|
formdef.data_class().wipe()
|
|
formdef.fields = [fields.PasswordField(id='0', label='pwd')]
|
|
formdef.store()
|
|
formdata = formdef.data_class()()
|
|
formdata.data = {'0': {'cleartext': 'foo'}}
|
|
formdata.store()
|
|
|
|
formdata2 = formdata.get(formdata.id)
|
|
assert formdata2.data == {'0': {'cleartext': 'foo'}}
|
|
|
|
def test_date_field(pub):
|
|
formdef.data_class().wipe()
|
|
formdef.fields = [fields.DateField(id='0', label='date')]
|
|
formdef.store()
|
|
formdata = formdef.data_class()()
|
|
value = time.strptime('2015-05-12', '%Y-%m-%d')
|
|
formdata.data = {'0': value}
|
|
formdata.store()
|
|
|
|
formdata2 = formdata.get(formdata.id)
|
|
assert formdata2.data == {'0': value}
|
|
|
|
assert formdata2.get_substitution_variables()['form_field_date'] == '2015-05-12'
|
|
pub.cfg['language'] = {'language': 'fr'}
|
|
assert formdata2.get_substitution_variables()['form_field_date'] == '12/05/2015'
|
|
pub.cfg['language'] = {'language': 'en'}
|