kin: BATON-ARCH-012 Добавить WEBHOOK_ENABLED флаг для локальной разработки
This commit is contained in:
parent
69d01ac3a6
commit
0f8ecdfc49
5 changed files with 434 additions and 0 deletions
61
tests/test_arch_012.py
Normal file
61
tests/test_arch_012.py
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
"""
|
||||
Tests for BATON-ARCH-012: WEBHOOK_ENABLED flag for local development.
|
||||
|
||||
Acceptance criteria:
|
||||
1. When WEBHOOK_ENABLED=False — set_webhook is NOT called during lifespan startup
|
||||
(mock set_webhook.call_count == 0).
|
||||
2. When WEBHOOK_ENABLED=True (default) — set_webhook IS called exactly once.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
os.environ.setdefault("BOT_TOKEN", "test-bot-token")
|
||||
os.environ.setdefault("CHAT_ID", "-1001234567890")
|
||||
os.environ.setdefault("WEBHOOK_SECRET", "test-webhook-secret")
|
||||
os.environ.setdefault("WEBHOOK_URL", "https://example.com/api/webhook/telegram")
|
||||
os.environ.setdefault("FRONTEND_ORIGIN", "http://localhost:3000")
|
||||
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from tests.conftest import temp_db
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Criterion 1 — WEBHOOK_ENABLED=False: set_webhook must NOT be called
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_lifespan_webhook_disabled_set_webhook_not_called():
|
||||
"""При WEBHOOK_ENABLED=False вызов set_webhook не должен происходить (call_count == 0)."""
|
||||
from backend.main import app
|
||||
|
||||
with temp_db():
|
||||
with patch("backend.telegram.set_webhook", new_callable=AsyncMock) as mock_set_webhook:
|
||||
with patch("backend.config.WEBHOOK_ENABLED", False):
|
||||
async with app.router.lifespan_context(app):
|
||||
pass
|
||||
|
||||
assert mock_set_webhook.call_count == 0
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Criterion 2 — WEBHOOK_ENABLED=True (default): set_webhook must be called
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_lifespan_webhook_enabled_set_webhook_called_once():
|
||||
"""При WEBHOOK_ENABLED=True вызов set_webhook должен произойти ровно один раз."""
|
||||
from backend.main import app
|
||||
|
||||
with temp_db():
|
||||
with patch("backend.telegram.set_webhook", new_callable=AsyncMock) as mock_set_webhook:
|
||||
with patch("backend.config.WEBHOOK_ENABLED", True):
|
||||
async with app.router.lifespan_context(app):
|
||||
pass
|
||||
|
||||
assert mock_set_webhook.call_count == 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue