test_optgroup.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import pytest
  2. from pytest import mark, raises
  3. from bottle import template
  4. @mark.parametrize('expected, params', [
  5. ("""<optgroup label="Group">
  6. <option value="val-to-backend" selected>val-displayed</option>
  7. </optgroup>""", {
  8. "name": "Group", "options": [
  9. {
  10. "value": "val-to-backend",
  11. "selected": True,
  12. "display": "val-displayed",
  13. }, ] }),
  14. ("""<optgroup label="Group">
  15. <option value="val-to-backend" disabled >val-to-backend</option>
  16. </optgroup>""", { "name": "Group", "options": [
  17. {
  18. "value": "val-to-backend",
  19. "disabled": True,
  20. }, ] }),
  21. ("""<optgroup label="Group">
  22. <option value="val1-to-backend" >val1</option>
  23. <option value="val2-to-backend" disabled >val2-to-backend</option>
  24. </optgroup>""", { "name": "Group", "options": [
  25. {
  26. "value": "val1-to-backend",
  27. "display": "val1",
  28. },
  29. {
  30. "value": "val2-to-backend",
  31. "disabled": True,
  32. }, ] }),
  33. ])
  34. def test_optgroup_render_exact(expected, params):
  35. assert template('app/rest/templates/optgroup', **params) == expected
  36. @mark.parametrize('name', [
  37. '',
  38. None,
  39. 'Group',
  40. ])
  41. @mark.parametrize('value', [
  42. *[ { "value": v } for v in ("", "val-to-backend", "!val-to-backend", None)],
  43. ({}, NameError, "name 'value' is not defined"),
  44. ])
  45. @mark.parametrize('display', [
  46. *[ { "display": v } for v in ("", "val-displayed", None)],
  47. {},
  48. ])
  49. @mark.parametrize('disabled', [
  50. *[ { "disabled": v } for v in (True, False, None)],
  51. {},
  52. ])
  53. @mark.parametrize('selected', [
  54. *[ { "selected": v } for v in (True, False, None)],
  55. {},
  56. ])
  57. def test_optgroup_render_includes(name, value, selected, disabled, display):
  58. options = dict()
  59. exp_exceptions = []
  60. for part, ex, msg in map(
  61. lambda x: x if isinstance(x, tuple) else (x, None, None),
  62. (value, selected, disabled, display)):
  63. options.update(part)
  64. if ex is not None:
  65. exp_exceptions.append(ex)
  66. if not exp_exceptions:
  67. assert template('app/rest/templates/optgroup', name=name, options=[ options, ]) is not None
  68. assert template('app/rest/templates/optgroup', name=name, options=[ options, options ]) is not None
  69. return
  70. with raises(tuple(exp_exceptions)):
  71. template('app/rest/templates/optgroup', name=name, options=[ options, ]) is not None
  72. with raises(tuple(exp_exceptions)):
  73. template('app/rest/templates/optgroup', name=name, options=[ options, options ]) is not None
  74. return
  75. @mark.parametrize('name', [
  76. ({}, NameError, "name 'name' is not defined"),
  77. *[ { "name": v } for v in ("", "group", None)],
  78. ])
  79. @mark.parametrize('options', [
  80. ({}, NameError, "name 'options' is not defined"),
  81. { "options": [{ "value": "anything" },] },
  82. { "options": [{ "value": "opt1" }, { "value": "opt2" }] },
  83. ])
  84. def test_optgroup_render(name, options):
  85. params = dict()
  86. exp_exceptions = []
  87. for part, ex, msg in map(
  88. lambda x: x if isinstance(x, tuple) else (x, None, None),
  89. (name, options)):
  90. params.update(part)
  91. if ex is not None:
  92. exp_exceptions.append(ex)
  93. if not exp_exceptions:
  94. assert template('app/rest/templates/optgroup', **params) is not None
  95. return
  96. with raises(tuple(exp_exceptions)):
  97. assert template('app/rest/templates/optgroup', **params) is not None
  98. return