test_process.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. from itertools import product
  2. from werkzeug.datastructures import ImmutableMultiDict
  3. from pydantic_form.translator import *
  4. from pydantic_form.utils import recursive_get
  5. import pytest
  6. @pytest.fixture
  7. def data(request, scenario):
  8. return getattr(scenario.data_factory, request.param)()
  9. SCENARIOS = [
  10. 'scenario_simple',
  11. 'scenario_nested',
  12. 'scenario_double_nested'
  13. ]
  14. @pytest.mark.parametrize(
  15. 'kwargs_factory',
  16. [
  17. lambda data: {'data': data},
  18. lambda data: {'formdata': ImmutableMultiDict(data)},
  19. lambda data: data,
  20. ], ids=[
  21. 'data', 'formdata', 'kwargs'
  22. ]
  23. )
  24. @pytest.mark.parametrize(
  25. 'data',
  26. ['valid', 'bad'],
  27. indirect=True
  28. )
  29. @pytest.mark.parametrize(
  30. 'scenario',
  31. SCENARIOS,
  32. indirect=True
  33. )
  34. def test_process_data(scenario, data, kwargs_factory):
  35. form = scenario.form()
  36. kwargs = kwargs_factory(data)
  37. form.process(**kwargs)
  38. assert form.data == data
  39. @pytest.mark.parametrize(
  40. 'data',
  41. ['valid'],
  42. indirect=True
  43. )
  44. @pytest.mark.parametrize(
  45. 'scenario',
  46. SCENARIOS,
  47. indirect=True
  48. )
  49. def test_validate_valid(scenario, data):
  50. form = scenario.form(data=data)
  51. assert form.validate()
  52. form = scenario.form()
  53. form.process(data=data)
  54. assert form.validate()
  55. @pytest.mark.parametrize(
  56. 'data',
  57. ['bad'],
  58. indirect=True
  59. )
  60. @pytest.mark.parametrize(
  61. 'scenario',
  62. SCENARIOS,
  63. indirect=True
  64. )
  65. def test_validate_bad(scenario, data):
  66. form = scenario.form(data=data)
  67. assert not form.validate()
  68. form = scenario.form()
  69. form.process(data=data)
  70. assert not form.validate()
  71. @pytest.mark.parametrize(
  72. 'data',
  73. ['valid'],
  74. indirect=True
  75. )
  76. @pytest.mark.parametrize(
  77. 'scenario',
  78. SCENARIOS,
  79. indirect=True
  80. )
  81. def test_errors_valid(scenario, data):
  82. form = scenario.form(data=data)
  83. assert form.errors == {}
  84. @pytest.mark.parametrize(
  85. 'data, errors_factory',
  86. [
  87. ('bad', lambda s: s.errors.bad),
  88. ('missing', lambda s: s.errors.missing),
  89. ],
  90. indirect=['data']
  91. )
  92. @pytest.mark.parametrize(
  93. 'scenario',
  94. SCENARIOS,
  95. indirect=True
  96. )
  97. def test_errors_invalid(scenario, data, errors_factory):
  98. form = scenario.form(data=data)
  99. form.validate()
  100. assert form.errors
  101. for k, error in errors_factory(scenario).items():
  102. assert recursive_get(form.errors, *k)[0]['type'] == error