75 lines
2.2 KiB
Python
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
|