import pytest
from pytest import mark, raises
from bottle import template
@mark.parametrize('expected, params', [
("""""", {
"name": "Group", "options": [
{
"value": "val-to-backend",
"selected": True,
"display": "val-displayed",
}, ] }),
("""""", { "name": "Group", "options": [
{
"value": "val-to-backend",
"disabled": True,
}, ] }),
("""""", { "name": "Group", "options": [
{
"value": "val1-to-backend",
"display": "val1",
},
{
"value": "val2-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