"""Тесты публичного эндпоинта настроек клиента (`/api/v1/public/settings`, сессия 33).""" import httpx import pytest_asyncio from sqlalchemy.ext.asyncio import AsyncSession from services.instance_settings import InstanceSettingsService, SettingsUpdateIn @pytest_asyncio.fixture(autouse=True) async def _reset_public_flags(db_session: AsyncSession) -> None: """Сбросить публичные тогглы перед каждым тестом — общая dev-БД не изолирована от ручных правок администратора (та же дисциплина, что и `_reset_registration_gating` в `test_auth.py`); `db_session` не коммитится в реальную БД, см. `conftest.py`.""" await InstanceSettingsService(db_session).update( SettingsUpdateIn(device_check_enabled=False, virtual_background_enabled=False) ) async def test_public_settings_disabled_by_default( client: httpx.AsyncClient, db_session: AsyncSession ) -> None: response = await client.get("/api/v1/public/settings") assert response.status_code == 200, response.text assert response.json() == {"device_check_enabled": False, "virtual_background_enabled": False} async def test_public_settings_reflects_enabled( client: httpx.AsyncClient, db_session: AsyncSession ) -> None: await InstanceSettingsService(db_session).update(SettingsUpdateIn(device_check_enabled=True)) await db_session.commit() response = await client.get("/api/v1/public/settings") assert response.status_code == 200, response.text assert response.json()["device_check_enabled"] is True async def test_public_settings_reflects_virtual_background_enabled( client: httpx.AsyncClient, db_session: AsyncSession ) -> None: """Замена фона нужна и на публичном превью входа (`JoinPage`) — до аутентификации.""" await InstanceSettingsService(db_session).update( SettingsUpdateIn(virtual_background_enabled=True) ) await db_session.commit() response = await client.get("/api/v1/public/settings") assert response.status_code == 200, response.text assert response.json()["virtual_background_enabled"] is True async def test_public_settings_requires_no_auth( client: httpx.AsyncClient, db_session: AsyncSession ) -> None: """Эндпоинт публичный — работает без заголовка `Authorization`, как и обязан (обе страницы, которым он нужен, доступны до входа в систему).""" response = await client.get("/api/v1/public/settings") assert response.status_code == 200, response.text