"""GET/PUT/POST /api/v1/settings/notifications""" from unittest.mock import patch from app.config import get_settings from app.models.notification_channel import NotificationChannel from app.services.notification_settings import get_effective_telegram_config def test_get_notification_settings_masks_secrets(jwt_headers, client, monkeypatch): monkeypatch.setenv("TELEGRAM_ENABLED", "true") monkeypatch.setenv("TELEGRAM_BOT_TOKEN", "1234567890:ABCDEFghij") monkeypatch.setenv("TELEGRAM_CHAT_ID", "2843230") monkeypatch.setenv("TELEGRAM_MIN_SEVERITY", "warning") get_settings.cache_clear() response = client.get("/api/v1/settings/notifications", headers=jwt_headers) assert response.status_code == 200 body = response.json() assert body["telegram"]["enabled"] is True assert body["telegram"]["configured"] is True assert body["telegram"]["min_severity"] == "warning" assert body["telegram"]["source"] == "env" assert body["telegram"]["bot_token_hint"].endswith("ghij") def test_put_telegram_settings_persists_db(jwt_headers, client, db_session, monkeypatch): monkeypatch.setenv("TELEGRAM_ENABLED", "false") monkeypatch.setenv("TELEGRAM_BOT_TOKEN", "") monkeypatch.setenv("TELEGRAM_CHAT_ID", "") monkeypatch.setenv("TELEGRAM_MIN_SEVERITY", "high") get_settings.cache_clear() response = client.put( "/api/v1/settings/notifications/telegram", headers=jwt_headers, json={ "enabled": True, "min_severity": "warning", "bot_token": "1234567890:TESTTOKEN", "chat_id": "999001", }, ) assert response.status_code == 200 body = response.json() assert body["source"] == "db" assert body["enabled"] is True assert body["min_severity"] == "warning" row = db_session.get(NotificationChannel, "telegram") assert row is not None assert row.bot_token == "1234567890:TESTTOKEN" assert row.chat_id == "999001" cfg = get_effective_telegram_config(db_session) assert cfg.source == "db" assert cfg.min_severity == "warning" def test_post_telegram_test_success(jwt_headers, client, db_session, monkeypatch): monkeypatch.setenv("TELEGRAM_ENABLED", "true") monkeypatch.setenv("TELEGRAM_BOT_TOKEN", "tok") monkeypatch.setenv("TELEGRAM_CHAT_ID", "1") get_settings.cache_clear() db_session.add( NotificationChannel( channel="telegram", enabled=True, min_severity="warning", bot_token="1234567890:ABCDEF", chat_id="2843230", ) ) db_session.commit() with patch("app.api.v1.settings.send_telegram_test_message") as mock_test: response = client.post("/api/v1/settings/notifications/telegram/test", headers=jwt_headers) assert response.status_code == 200 assert response.json()["ok"] is True mock_test.assert_called_once() def test_post_telegram_test_not_configured(jwt_headers, client, monkeypatch): monkeypatch.setenv("TELEGRAM_ENABLED", "false") monkeypatch.setenv("TELEGRAM_BOT_TOKEN", "") monkeypatch.setenv("TELEGRAM_CHAT_ID", "") get_settings.cache_clear() response = client.post("/api/v1/settings/notifications/telegram/test", headers=jwt_headers) assert response.status_code == 400