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