music on atproto
plyr.fm
1import pytest
2
3from backend.config import Settings
4
5
6@pytest.fixture(autouse=True)
7def clear_settings_env(monkeypatch):
8 env_vars = [
9 "PORT",
10 "FRONTEND_URL",
11 "BACKGROUND_TASK_INTERVAL_SECONDS",
12 "DATABASE_URL",
13 "R2_BUCKET",
14 "AWS_ACCESS_KEY_ID",
15 "AWS_SECRET_ACCESS_KEY",
16 "R2_ENDPOINT_URL",
17 "R2_PUBLIC_BUCKET_URL",
18 "ATPROTO_CLIENT_ID",
19 "ATPROTO_SCOPE_OVERRIDE",
20 "ATPROTO_REDIRECT_URI",
21 "OAUTH_ENCRYPTION_KEY",
22 "LOGFIRE_ENABLED",
23 "LOGFIRE_WRITE_TOKEN",
24 "NOTIFY_ENABLED",
25 "NOTIFY_RECIPIENT_HANDLE",
26 "NOTIFY_BOT_HANDLE",
27 "NOTIFY_BOT_PASSWORD",
28 "BROADCAST_CHANNEL_PREFIX",
29 ]
30
31 for var in env_vars:
32 monkeypatch.delenv(var, raising=False)
33
34
35def test_settings_loads_env(monkeypatch):
36 monkeypatch.setenv("PORT", "9100")
37 monkeypatch.setenv("FRONTEND_URL", "https://relay.example.com")
38 monkeypatch.setenv("DATABASE_URL", "postgresql+psycopg://user:pass@host/db")
39 monkeypatch.setenv("R2_BUCKET", "media")
40 monkeypatch.setenv("AWS_ACCESS_KEY_ID", "key123")
41 monkeypatch.setenv("ATPROTO_CLIENT_ID", "https://client/meta.json")
42 monkeypatch.setenv("ATPROTO_REDIRECT_URI", "https://relay.example.com/callback")
43 monkeypatch.setenv("OAUTH_ENCRYPTION_KEY", "Z2V0LXlvdXItb3duLWRhbS1rZXk=")
44 monkeypatch.setenv("LOGFIRE_ENABLED", "true")
45 monkeypatch.setenv("LOGFIRE_WRITE_TOKEN", "pylf_token")
46 monkeypatch.setenv("NOTIFY_ENABLED", "true")
47 monkeypatch.setenv("NOTIFY_RECIPIENT_HANDLE", "relay.example")
48 monkeypatch.setenv("NOTIFY_BOT_HANDLE", "bot.handle")
49 monkeypatch.setenv("NOTIFY_BOT_PASSWORD", "secret")
50
51 settings = Settings()
52
53 assert settings.app.port == 9100
54 assert settings.frontend.url == "https://relay.example.com"
55 assert settings.database.url == "postgresql+psycopg://user:pass@host/db"
56 assert settings.storage.r2_bucket == "media"
57 assert settings.storage.aws_access_key_id == "key123"
58 assert settings.atproto.client_id == "https://client/meta.json"
59 assert settings.atproto.redirect_uri == "https://relay.example.com/callback"
60 assert settings.atproto.oauth_encryption_key == "Z2V0LXlvdXItb3duLWRhbS1rZXk="
61 assert settings.observability.enabled is True
62 assert settings.observability.write_token == "pylf_token"
63 assert settings.notify.enabled is True
64 assert settings.notify.recipient_handle == "relay.example"
65 assert settings.notify.bot.handle == "bot.handle"
66 assert settings.notify.bot.password == "secret"
67
68
69def test_settings_supports_nested_env(monkeypatch):
70 monkeypatch.setenv("PORT", "9300")
71 monkeypatch.setenv("BROADCAST_CHANNEL_PREFIX", "newprefix")
72 monkeypatch.setenv("FRONTEND_URL", "https://cdn.example.com")
73 monkeypatch.setenv("ATPROTO_CLIENT_ID", "https://new/meta.json")
74 monkeypatch.setenv("ATPROTO_SCOPE_OVERRIDE", "custom scope")
75
76 settings = Settings()
77
78 assert settings.app.port == 9300
79 assert settings.app.broadcast_channel_prefix == "newprefix"
80 assert settings.frontend.url == "https://cdn.example.com"
81 assert settings.atproto.client_id == "https://new/meta.json"
82 assert settings.atproto.scope_override == "custom scope"