Skip to content

Commit

Permalink
fix(tests): make settings dotenv file path configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
RobertRosca committed Oct 2, 2024
1 parent f0c796a commit c82118e
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 11 deletions.
6 changes: 6 additions & 0 deletions src/zulip_write_only_proxy/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ def create_app():

from . import routers, services
from ._logging import RequestLoggingMiddleware
from .settings import configure as configure_settings
from .settings import settings

configure_settings()

@asynccontextmanager
async def lifespan(app: fastapi.FastAPI):
from . import _logging, mymdc
Expand Down Expand Up @@ -87,8 +90,11 @@ def get_trusted_hosts(logger): # pragma: no cover
import uvicorn

from . import _logging, get_logger
from .settings import configure as configure_settings
from .settings import settings

configure_settings()

_logging.configure(settings.debug, add_call_site_parameters=False)

logger = get_logger()
Expand Down
22 changes: 18 additions & 4 deletions src/zulip_write_only_proxy/settings.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,24 @@
import datetime as dt
import os
from pathlib import Path

from pydantic import AnyUrl, DirectoryPath, FilePath, HttpUrl, SecretStr
from pydantic_settings import BaseSettings, SettingsConfigDict

from . import get_logger

logger = get_logger(__name__)

settings: "Settings" = None # type: ignore[assignment]


def configure():
global settings
zwop_dotenv_file = os.getenv("ZWOP_DOTENV_FILE", None)
logger.info("Configuring settings", zwop_dotenv_file=zwop_dotenv_file)
settings = Settings(_env_file=zwop_dotenv_file) # type: ignore[call-arg]
return settings


class Auth(BaseSettings):
client_id: str
Expand Down Expand Up @@ -54,8 +69,7 @@ class Settings(BaseSettings):
token_writer: TokenWriter = TokenWriter()

model_config = SettingsConfigDict(
env_prefix="ZWOP_", env_file=[".env"], env_nested_delimiter="__"
env_prefix="ZWOP_",
env_file=[".env"],
env_nested_delimiter="__",
)


settings = Settings() # type: ignore[call-arg]
27 changes: 20 additions & 7 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import asyncio
import os
from datetime import datetime
from unittest.mock import AsyncMock, MagicMock, patch

Expand All @@ -9,7 +10,6 @@
from pydantic_core import Url

from zulip_write_only_proxy.models import BotConfig, ScopedClient
from zulip_write_only_proxy.settings import settings as base_settings


@pytest.fixture(scope="session")
Expand All @@ -27,15 +27,28 @@ def settings(tmp_path_factory):
- Remove credentials
"""
config_dir = tmp_path_factory.mktemp("config")
base_settings.config_dir = config_dir

base_settings.auth.client_id = "client_id"
base_settings.auth.client_secret = SecretStr("client_secret")
dotenv_file = config_dir / ".env"

base_settings.mymdc.secret = SecretStr("mymdc_secret")
base_settings.mymdc.token_url = Url("http://foobar.local/token")
dotenv_file.write_text(
f"""ZWOP_CONFIG_DIR={config_dir}
ZWOP_SESSION_SECRET=session_secret
return base_settings
ZWOP_MYMDC__ID=mymdc_id
ZWOP_MYMDC__SECRET=mymdc_secret
[email protected]
ZWOP_MYMDC__TOKEN_URL=http://foobar.local/token
ZWOP_AUTH__CLIENT_ID=client_id
ZWOP_AUTH__CLIENT_SECRET=client_secret
"""
)

os.environ["ZWOP_DOTENV_FILE"] = str(dotenv_file)

from zulip_write_only_proxy.settings import configure

return configure()


@pytest.fixture(scope="session", autouse=True)
Expand Down

0 comments on commit c82118e

Please sign in to comment.