test_config.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import os
  2. import pytest
  3. import reflex as rx
  4. import reflex.config
  5. from reflex.constants import Endpoint
  6. def test_requires_app_name():
  7. """Test that a config requires an app_name."""
  8. with pytest.raises(ValueError):
  9. rx.Config()
  10. def test_set_app_name(base_config_values):
  11. """Test that the app name is set to the value passed in.
  12. Args:
  13. base_config_values: Config values.
  14. """
  15. config = rx.Config(**base_config_values)
  16. assert config.app_name == base_config_values["app_name"]
  17. @pytest.mark.parametrize(
  18. "param",
  19. [
  20. "db_config",
  21. "admin_dash",
  22. "env_path",
  23. ],
  24. )
  25. def test_deprecated_params(base_config_values, param):
  26. """Test that deprecated params are removed from the config.
  27. Args:
  28. base_config_values: Config values.
  29. param: The deprecated param.
  30. """
  31. with pytest.raises(ValueError):
  32. rx.Config(**base_config_values, **{param: "test"})
  33. @pytest.mark.parametrize(
  34. "env_var, value",
  35. [
  36. ("APP_NAME", "my_test_app"),
  37. ("FRONTEND_PORT", 3001),
  38. ("BACKEND_PORT", 8001),
  39. ("API_URL", "https://mybackend.com:8000"),
  40. ("DEPLOY_URL", "https://myfrontend.com"),
  41. ("BACKEND_HOST", "127.0.0.1"),
  42. ("DB_URL", "postgresql://user:pass@localhost:5432/db"),
  43. ("REDIS_URL", "redis://localhost:6379"),
  44. ("TIMEOUT", 600),
  45. ("TELEMETRY_ENABLED", False),
  46. ("TELEMETRY_ENABLED", True),
  47. ],
  48. )
  49. def test_update_from_env(base_config_values, monkeypatch, env_var, value):
  50. """Test that environment variables override config values.
  51. Args:
  52. base_config_values: Config values.
  53. monkeypatch: The pytest monkeypatch object.
  54. env_var: The environment variable name.
  55. value: The environment variable value.
  56. """
  57. monkeypatch.setenv(env_var, str(value))
  58. assert os.environ.get(env_var) == str(value)
  59. config = rx.Config(**base_config_values)
  60. assert getattr(config, env_var.lower()) == value
  61. @pytest.mark.parametrize(
  62. "kwargs, expected",
  63. [
  64. (
  65. {"app_name": "test_app", "api_url": "http://example.com"},
  66. f"{Endpoint.EVENT}",
  67. ),
  68. (
  69. {"app_name": "test_app", "api_url": "http://example.com/api"},
  70. f"/api{Endpoint.EVENT}",
  71. ),
  72. ({"app_name": "test_app", "event_namespace": "/event"}, f"/event"),
  73. ({"app_name": "test_app", "event_namespace": "event"}, f"/event"),
  74. ({"app_name": "test_app", "event_namespace": "event/"}, f"/event"),
  75. ({"app_name": "test_app", "event_namespace": "/_event"}, f"{Endpoint.EVENT}"),
  76. ({"app_name": "test_app", "event_namespace": "_event"}, f"{Endpoint.EVENT}"),
  77. ({"app_name": "test_app", "event_namespace": "_event/"}, f"{Endpoint.EVENT}"),
  78. ],
  79. )
  80. def test_event_namespace(mocker, kwargs, expected):
  81. """Test the event namespace.
  82. Args:
  83. mocker: The pytest mock object.
  84. kwargs: The Config kwargs.
  85. expected: Expected namespace
  86. """
  87. conf = rx.Config(**kwargs)
  88. mocker.patch("reflex.config.get_config", return_value=conf)
  89. config = reflex.config.get_config()
  90. assert conf == config
  91. assert config.get_event_namespace() == expected