|
@@ -0,0 +1,126 @@
|
|
|
+import pytest
|
|
|
+from pytest import mark, raises
|
|
|
+from bottle import template
|
|
|
+
|
|
|
+@mark.parametrize('expected, params', [
|
|
|
+ ("""<optgroup label="Group">
|
|
|
+<option
|
|
|
+ value="val-to-backend"
|
|
|
+
|
|
|
+ selected>
|
|
|
+ val-displayed
|
|
|
+</option></optgroup>""", {
|
|
|
+ "name": "Group", "options": [
|
|
|
+ {
|
|
|
+ "value": "val-to-backend",
|
|
|
+ "selected": True,
|
|
|
+ "display": "val-displayed",
|
|
|
+ }, ] }),
|
|
|
+ ("""<optgroup label="Group">
|
|
|
+<option
|
|
|
+ value="val-to-backend"
|
|
|
+ disabled
|
|
|
+ >
|
|
|
+ val-to-backend
|
|
|
+</option></optgroup>""", { "name": "Group", "options": [
|
|
|
+ {
|
|
|
+ "value": "val-to-backend",
|
|
|
+ "disabled": True,
|
|
|
+ }, ] }),
|
|
|
+ ("""<optgroup label="Group">
|
|
|
+<option
|
|
|
+ value="val-to-backend"
|
|
|
+
|
|
|
+ selected>
|
|
|
+ val-displayed
|
|
|
+</option><option
|
|
|
+ value="val-to-backend"
|
|
|
+ disabled
|
|
|
+ >
|
|
|
+ val-to-backend
|
|
|
+</option></optgroup>""", { "name": "Group", "options": [
|
|
|
+ {
|
|
|
+ "value": "val-to-backend",
|
|
|
+ "selected": True,
|
|
|
+ "display": "val-displayed",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "value": "val-to-backend",
|
|
|
+ "disabled": True,
|
|
|
+ }, ] }),
|
|
|
+])
|
|
|
+def test_optgroup_render_exact(expected, params):
|
|
|
+ assert template('app/rest/templates/optgroup', **params) == expected
|
|
|
+
|
|
|
+
|
|
|
+@mark.parametrize('name', [
|
|
|
+ '',
|
|
|
+ None,
|
|
|
+ 'Group',
|
|
|
+])
|
|
|
+@mark.parametrize('value', [
|
|
|
+ *[ { "value": v } for v in ("", "val-to-backend", "!val-to-backend", None)],
|
|
|
+ ({}, NameError, "name 'value' is not defined"),
|
|
|
+])
|
|
|
+@mark.parametrize('display', [
|
|
|
+ *[ { "display": v } for v in ("", "val-displayed", None)],
|
|
|
+ {},
|
|
|
+])
|
|
|
+@mark.parametrize('disabled', [
|
|
|
+ *[ { "disabled": v } for v in (True, False, None)],
|
|
|
+ {},
|
|
|
+])
|
|
|
+@mark.parametrize('selected', [
|
|
|
+ *[ { "selected": v } for v in (True, False, None)],
|
|
|
+ {},
|
|
|
+])
|
|
|
+def test_optgroup_render_includes(name, value, selected, disabled, display):
|
|
|
+ options = dict()
|
|
|
+ exp_exceptions = []
|
|
|
+ for part, ex, msg in map(
|
|
|
+ lambda x: x if isinstance(x, tuple) else (x, None, None),
|
|
|
+ (value, selected, disabled, display)):
|
|
|
+ options.update(part)
|
|
|
+ if ex is not None:
|
|
|
+ exp_exceptions.append(ex)
|
|
|
+
|
|
|
+ if not exp_exceptions:
|
|
|
+ assert template('app/rest/templates/optgroup', name=name, options=[ options, ]) is not None
|
|
|
+ assert template('app/rest/templates/optgroup', name=name, options=[ options, options ]) is not None
|
|
|
+ return
|
|
|
+
|
|
|
+ with raises(tuple(exp_exceptions)):
|
|
|
+ template('app/rest/templates/optgroup', name=name, options=[ options, ]) is not None
|
|
|
+
|
|
|
+ with raises(tuple(exp_exceptions)):
|
|
|
+ template('app/rest/templates/optgroup', name=name, options=[ options, options ]) is not None
|
|
|
+
|
|
|
+ return
|
|
|
+
|
|
|
+@mark.parametrize('name', [
|
|
|
+ ({}, NameError, "name 'name' is not defined"),
|
|
|
+ *[ { "name": v } for v in ("", "group", None)],
|
|
|
+])
|
|
|
+@mark.parametrize('options', [
|
|
|
+ ({}, NameError, "name 'options' is not defined"),
|
|
|
+ { "options": [{ "value": "anything" },] },
|
|
|
+ { "options": [{ "value": "opt1" }, { "value": "opt2" }] },
|
|
|
+])
|
|
|
+def test_optgroup_render(name, options):
|
|
|
+ params = dict()
|
|
|
+ exp_exceptions = []
|
|
|
+ for part, ex, msg in map(
|
|
|
+ lambda x: x if isinstance(x, tuple) else (x, None, None),
|
|
|
+ (name, options)):
|
|
|
+ params.update(part)
|
|
|
+ if ex is not None:
|
|
|
+ exp_exceptions.append(ex)
|
|
|
+
|
|
|
+ if not exp_exceptions:
|
|
|
+ assert template('app/rest/templates/optgroup', **params) is not None
|
|
|
+ return
|
|
|
+
|
|
|
+ with raises(tuple(exp_exceptions)):
|
|
|
+ assert template('app/rest/templates/optgroup', **params) is not None
|
|
|
+
|
|
|
+ return
|