test_route.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import pytest
  2. from reflex import constants
  3. from reflex.route import catchall_in_route, get_route_args, verify_route_validity
  4. @pytest.mark.parametrize(
  5. "route_name, expected",
  6. [
  7. ("/users/[id]", {"id": constants.RouteArgType.SINGLE}),
  8. (
  9. "/posts/[postId]/comments/[commentId]",
  10. {
  11. "postId": constants.RouteArgType.SINGLE,
  12. "commentId": constants.RouteArgType.SINGLE,
  13. },
  14. ),
  15. ],
  16. )
  17. def test_route_args(route_name, expected):
  18. assert get_route_args(route_name) == expected
  19. @pytest.mark.parametrize(
  20. "route_name",
  21. [
  22. "/products/[id]/[id]",
  23. "/posts/[postId]/comments/[postId]",
  24. ],
  25. )
  26. def test_invalid_route_args(route_name):
  27. with pytest.raises(ValueError):
  28. get_route_args(route_name)
  29. @pytest.mark.parametrize(
  30. "route_name,expected",
  31. [
  32. ("/events/[year]/[month]/[...slug]", "[...slug]"),
  33. ("pages/shop/[[...slug]]", "[[...slug]]"),
  34. ],
  35. )
  36. def test_catchall_in_route(route_name, expected):
  37. assert catchall_in_route(route_name) == expected
  38. @pytest.mark.parametrize(
  39. "route_name",
  40. [
  41. "/products",
  42. "/products/[category]/[...]/details/[version]",
  43. "[...]",
  44. "/products/details",
  45. ],
  46. )
  47. def test_verify_valid_routes(route_name):
  48. verify_route_validity(route_name)
  49. @pytest.mark.parametrize(
  50. "route_name",
  51. [
  52. "/products/[...]/details/[category]/latest",
  53. "/blog/[...]/post/[year]/latest",
  54. "/products/[...]/details/[...]/[category]/[...]/latest",
  55. "/products/[...]/details/category",
  56. ],
  57. )
  58. def test_verify_invalid_routes(route_name):
  59. with pytest.raises(ValueError):
  60. verify_route_validity(route_name)