DFiP_Budget_planing/api/tests/unit/test_query_validation.py
2026-05-15 18:42:05 +03:00

75 lines
2.2 KiB
Python

import pytest
from fastapi import HTTPException
from src.api.v1.forms import _parse_sections_csv, _validate_sheet_query_params
from src.api.v1.projects import _parse_sections
from src.db.models.form_type import FormTypeEnum
from src.domain.schemas import DirectionSchemaEnum
def test_parse_sections_csv_returns_none_for_empty_values():
assert _parse_sections_csv(None) is None
assert _parse_sections_csv("") is None
assert _parse_sections_csv(" , , ") is None
def test_parse_sections_csv_splits_and_trims():
assert _parse_sections_csv("plan, q1, q2 ") == ["plan", "q1", "q2"]
def test_validate_sheet_query_requires_direction_for_form1_ahr_cap():
with pytest.raises(HTTPException) as exc:
_validate_sheet_query_params(FormTypeEnum.FORM_1, "AHR", None, None)
assert exc.value.status_code == 400
def test_validate_sheet_query_rejects_direction_for_non_form1_or_non_ahr_cap():
with pytest.raises(HTTPException) as exc1:
_validate_sheet_query_params(
FormTypeEnum.FORM_2,
"AHR",
DirectionSchemaEnum.SUPPORT,
None,
)
assert exc1.value.status_code == 400
with pytest.raises(HTTPException) as exc2:
_validate_sheet_query_params(
FormTypeEnum.FORM_1,
"SMETA",
DirectionSchemaEnum.SUPPORT,
None,
)
assert exc2.value.status_code == 400
def test_validate_sheet_query_rejects_sections_for_non_main_sheets():
with pytest.raises(HTTPException) as exc:
_validate_sheet_query_params(FormTypeEnum.FORM_1, "SMETA", None, ["q1"])
assert exc.value.status_code == 400
def test_validate_sheet_query_accepts_valid_combinations():
_validate_sheet_query_params(
FormTypeEnum.FORM_1,
"AHR",
DirectionSchemaEnum.SUPPORT,
["plan", "q1"],
)
_validate_sheet_query_params(
FormTypeEnum.FORM_2,
"AHR",
None,
["plan", "q1"],
)
def test_parse_form3_sections_accepts_supported_values():
assert _parse_sections("q1,q2,year") == ["q1", "q2", "year"]
def test_parse_form3_sections_rejects_invalid_values():
with pytest.raises(HTTPException) as exc:
_parse_sections("q1,q5")
assert exc.value.status_code == 400