"""Верхние границы входов консолидаций (spec consolidations-api «Границы входных данных», M-6 из #21): превышение — 422 со списком ошибок валидации (формат приложения: `detail[].loc/msg`) до обращения к БД.""" import uuid import pytest from sqlalchemy.ext.asyncio import AsyncSession from src.schemas.consolidations import MAX_MEMBERS, MAX_OSV_QUERY, MAX_STATUS_COMMENT from tests.conftest import AuthClientFactory HTTP_UNPROCESSABLE = 422 KA_RF = "ka_rf@armka.local" VERSIONS = "/consolidations/versions" @pytest.mark.integration async def test_members_over_limit_is_422(auth_client: AuthClientFactory, seeded: AsyncSession) -> None: # noqa: ARG001 client = await auth_client(KA_RF) ids = [str(uuid.uuid4()) for _ in range(MAX_MEMBERS + 1)] response = await client.put(f"{VERSIONS}/{uuid.uuid4()}/members", json={"legal_entity_ids": ids}) assert response.status_code == HTTP_UNPROCESSABLE assert response.json()["detail"][0]["loc"] == ["body", "legal_entity_ids"] @pytest.mark.integration async def test_status_comment_over_limit_is_422(auth_client: AuthClientFactory, seeded: AsyncSession) -> None: # noqa: ARG001 client = await auth_client(KA_RF) response = await client.post( f"{VERSIONS}/{uuid.uuid4()}/status", json={"to_status": "CANCELLED", "comment": "а" * (MAX_STATUS_COMMENT + 1)} ) assert response.status_code == HTTP_UNPROCESSABLE assert response.json()["detail"][0]["loc"] == ["body", "comment"] @pytest.mark.integration async def test_osv_query_over_limit_is_422(auth_client: AuthClientFactory, seeded: AsyncSession) -> None: # noqa: ARG001 client = await auth_client(KA_RF) response = await client.get(f"{VERSIONS}/{uuid.uuid4()}/osv", params={"q": "а" * (MAX_OSV_QUERY + 1)}) assert response.status_code == HTTP_UNPROCESSABLE assert response.json()["detail"][0]["loc"] == ["query", "q"]