Procházet zdrojové kódy

add unit tests for option group template

Daniel Sheffield před 1 rokem
rodič
revize
5a361e9a32
1 změnil soubory, kde provedl 126 přidání a 0 odebrání
  1. 126 0
      test/rest/templates/test_optgroup.py

+ 126 - 0
test/rest/templates/test_optgroup.py

@@ -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