test_iterators.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import pytest
  2. from pydantic_form.iterators import iter_form, iter_schema, iter_form_class, iter_schema_class
  3. @pytest.fixture
  4. def instance_factory(request):
  5. def _factory(scenario, data):
  6. instances = dict(
  7. schema_class=scenario.schema,
  8. schema=scenario.schema(**data),
  9. form_class=scenario.wtf_form,
  10. form=scenario.wtf_form()
  11. )
  12. return instances[request.param]
  13. return _factory
  14. @pytest.mark.parametrize(
  15. 'scenario',
  16. [
  17. 'scenario_simple',
  18. 'scenario_simple_list',
  19. 'scenario_nested',
  20. 'scenario_nested_list',
  21. 'scenario_double_nested'
  22. ], indirect=True
  23. )
  24. def test_iterator_schema(scenario):
  25. data = scenario.data_factory.valid()
  26. keys = scenario.keys
  27. assert [k for k, _, _ in iter_schema_class(scenario.schema)] == keys.class_
  28. schema_instance = scenario.schema(**data)
  29. assert [k for k, _, _ in iter_schema_class(scenario.schema)] == keys.class_
  30. assert [k for k, _ in iter_schema(schema_instance)] == keys.instance
  31. schema_construct = scenario.schema.construct(data, scenario.schema.__fields__)
  32. assert [k for k, _ in iter_schema(schema_construct)] == keys.instance
  33. @pytest.mark.parametrize(
  34. 'scenario',
  35. [
  36. 'scenario_simple',
  37. 'scenario_simple_list',
  38. 'scenario_nested',
  39. 'scenario_nested_list',
  40. 'scenario_double_nested'
  41. ], indirect=True
  42. )
  43. def test_iterator_form(scenario):
  44. keys = scenario.keys
  45. assert [k for k, _, _ in iter_form_class(scenario.form)] == keys.class_
  46. form = scenario.form()
  47. assert [k for k, _, _ in iter_form_class(scenario.form)] == keys.class_
  48. assert [k for k, _ in iter_form(form)] == keys.instance