test_request_query.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from typing import Optional
  2. import pytest
  3. from pydantic import ValidationError
  4. from clean_python import Filter
  5. from clean_python import PageOptions
  6. from clean_python.fastapi import RequestQuery
  7. class SomeQuery(RequestQuery):
  8. foo: Optional[int] = None
  9. @pytest.mark.parametrize(
  10. "query,expected",
  11. [
  12. (
  13. RequestQuery(),
  14. PageOptions(limit=50, offset=0, order_by="id", ascending=True),
  15. ),
  16. (
  17. RequestQuery(limit=10, offset=20, order_by="-id"),
  18. PageOptions(limit=10, offset=20, order_by="id", ascending=False),
  19. ),
  20. ],
  21. )
  22. def test_as_page_options(query, expected):
  23. assert query.as_page_options() == expected
  24. @pytest.mark.parametrize(
  25. "query,expected",
  26. [
  27. (SomeQuery(), []),
  28. (SomeQuery(foo=None), []),
  29. (SomeQuery(foo=3), [Filter(field="foo", values=[3])]),
  30. ],
  31. )
  32. def test_filters(query, expected):
  33. assert query.filters() == expected
  34. def test_validate_order_by():
  35. with pytest.raises(ValidationError):
  36. RequestQuery(limit=10, offset=0, order_by="foo")