tests: add testing of table with rows widget (#2763)
This commit is contained in:
parent
b573f881e5
commit
f261cd6610
|
@ -0,0 +1,123 @@
|
|||
import sys
|
||||
import shutil
|
||||
import tempfile
|
||||
import copy
|
||||
|
||||
from quixote import cleanup
|
||||
from quixote.http_request import parse_query
|
||||
import mechanize
|
||||
|
||||
from wcs import publisher
|
||||
from wcs.qommon.form import *
|
||||
from wcs.qommon.http_request import HTTPRequest
|
||||
|
||||
def setup_module(module):
|
||||
cleanup()
|
||||
|
||||
global pub, req
|
||||
|
||||
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
|
||||
pub = publisher.WcsPublisher.create_publisher()
|
||||
|
||||
req = HTTPRequest(None, {})
|
||||
pub._set_request(req)
|
||||
|
||||
def teardown_module(module):
|
||||
shutil.rmtree(pub.APP_DIR)
|
||||
|
||||
class MockHtmlForm(object):
|
||||
def __init__(self, widget):
|
||||
widget = copy.copy(widget)
|
||||
form = Form(method='post', use_tokens=False, enctype='application/x-www-form-urlencoded')
|
||||
form.widgets.append(widget)
|
||||
self.as_html = str(form.render())
|
||||
response = mechanize._response.test_html_response(self.as_html)
|
||||
factory = mechanize.DefaultFactory()
|
||||
factory.set_response(response)
|
||||
self.factory = factory
|
||||
self.form = list(factory.forms())[0]
|
||||
|
||||
def set_form_value(self, name, value):
|
||||
self.form.set_value(value, name)
|
||||
|
||||
def get_parsed_query(self):
|
||||
return parse_query(self.form._request_data()[1], 'utf-8')
|
||||
|
||||
def mock_form_submission(req, widget, html_vars={}, click=None):
|
||||
form = MockHtmlForm(widget)
|
||||
for k, v in html_vars.items():
|
||||
form.set_form_value(k, v)
|
||||
if click is not None:
|
||||
request = form.form.click(click)
|
||||
print 'data:', request.data
|
||||
req.form = parse_query(request.data, 'utf-8')
|
||||
else:
|
||||
req.form = form.get_parsed_query()
|
||||
|
||||
def test_stringwidget_values():
|
||||
widget = StringWidget('test')
|
||||
form = MockHtmlForm(widget)
|
||||
assert 'name="test"' in form.as_html
|
||||
req.form = {}
|
||||
assert widget.parse() is None
|
||||
|
||||
widget = StringWidget('test', value='foo')
|
||||
req.form = {}
|
||||
assert widget.parse() == 'foo'
|
||||
|
||||
widget = StringWidget('test', value='foo')
|
||||
mock_form_submission(req, widget, {'test': ''})
|
||||
assert widget.parse() is None
|
||||
|
||||
widget = StringWidget('test', value='foo')
|
||||
mock_form_submission(req, widget, {'test': 'bar'})
|
||||
assert widget.parse() == 'bar'
|
||||
|
||||
def test_stringwidget_required():
|
||||
widget = StringWidget('test', value='foo', required=True)
|
||||
mock_form_submission(req, widget, {'test': ''})
|
||||
assert widget.has_error()
|
||||
|
||||
widget = StringWidget('test', value='foo', required=True)
|
||||
mock_form_submission(req, widget, {'test': 'bar'})
|
||||
assert not widget.has_error()
|
||||
assert widget.parse() == 'bar'
|
||||
|
||||
def test_table_list_rows():
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
|
||||
form = MockHtmlForm(widget)
|
||||
req.form = {}
|
||||
for row in range(5):
|
||||
for col in range(3):
|
||||
assert 'test$element%d$col%d' % (row, col) in form.as_html
|
||||
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
|
||||
form = MockHtmlForm(widget)
|
||||
mock_form_submission(req, widget, {'test$element0$col0': 'bar',
|
||||
'test$element1$col1': 'foo'})
|
||||
assert widget.parse() == [[u'bar', None, None], [None, u'foo', None]]
|
||||
|
||||
def test_table_list_rows_add_row():
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
|
||||
form = MockHtmlForm(widget)
|
||||
req.form = {}
|
||||
mock_form_submission(req, widget, click='test$add_element')
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
|
||||
form = MockHtmlForm(widget)
|
||||
for row in range(6): # one more row
|
||||
for col in range(3):
|
||||
assert 'test$element%d$col%d' % (row, col) in form.as_html
|
||||
|
||||
def test_table_list_rows_required():
|
||||
req.form = {}
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'], required=True)
|
||||
form = MockHtmlForm(widget)
|
||||
mock_form_submission(req, widget)
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'], required=True)
|
||||
assert widget.has_error()
|
||||
|
||||
req.form = {}
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'], required=True)
|
||||
mock_form_submission(req, widget, click='test$add_element')
|
||||
widget = TableListRowsWidget('test', columns=['a', 'b', 'c'], required=True)
|
||||
assert not widget.has_error()
|
Loading…
Reference in New Issue