test_config.py 3.3 KB

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