167 lines
5.5 KiB
Python
167 lines
5.5 KiB
Python
import pytest
|
|
from pydantic import ValidationError
|
|
from backend.tools.api.schemas import (
|
|
CourtSearch, JudgeSearch, DecisionSearch,
|
|
CivilProceedingsSearch,
|
|
CourtByID, JudgeByID, AdminProceedingsByID,
|
|
ExecutorByID, ExecutorByECE,
|
|
JudgeAutocomplete, ContractAutocomplete, CivilProceedingsAutocomplete,
|
|
DecisionAutocomplete
|
|
)
|
|
|
|
class TestPagination:
|
|
"""
|
|
Checks pagination (page/size) validation,
|
|
defaults, and sorting.
|
|
"""
|
|
|
|
def test_page_is_valid(self) -> None:
|
|
is_valid = JudgeSearch(page=0, size=10)
|
|
assert is_valid.page == 0
|
|
|
|
@pytest.mark.parametrize("page", [-1, -100])
|
|
def test_invalid_page(self, page) -> None:
|
|
with pytest.raises(ValidationError):
|
|
JudgeSearch(page=page)
|
|
|
|
@pytest.mark.parametrize("size", [0, -1, -100])
|
|
def test_invalid_size(self, size) -> None:
|
|
with pytest.raises(ValidationError):
|
|
JudgeSearch(size=size)
|
|
|
|
def test_sort_direction_default(self) -> None:
|
|
asc = JudgeSearch()
|
|
assert asc.sortDirection == "ASC"
|
|
|
|
def test_sort_direction_desc(self) -> None:
|
|
desc = JudgeSearch(sortDirection="DESC")
|
|
assert desc.sortDirection == "DESC"
|
|
|
|
def test_sort_direction_invalid(self) -> None:
|
|
with pytest.raises(ValidationError):
|
|
JudgeSearch(sortDirection="INVALID")
|
|
|
|
class TestIDNormalization:
|
|
"""
|
|
Checks ID normalization
|
|
(adding prefixes and sanitizing input).
|
|
"""
|
|
|
|
@pytest.mark.parametrize("input_id", ["sud_121", "121", " sud_121 ", " 121 "])
|
|
def test_court_by_id(self, input_id) -> None:
|
|
court = CourtByID(id=input_id)
|
|
assert court.id == "sud_121"
|
|
|
|
@pytest.mark.parametrize("input_id", ["sudca_121", "121", " sudca_121 ", " 121 "])
|
|
def test_judge_by_id(self, input_id) -> None:
|
|
court = JudgeByID(id=input_id)
|
|
assert court.id == "sudca_121"
|
|
|
|
@pytest.mark.parametrize("input_id", ["spravneKonanie_121", "121", " spravneKonanie_121 ", " 121 "])
|
|
def test_admin_proceedings_by_id(self, input_id) -> None:
|
|
assert AdminProceedingsByID(id=input_id).id == "spravneKonanie_121"
|
|
|
|
@pytest.mark.parametrize("input_id", ["exekutor_121", "121", " exekutor_121 ", " 121 "])
|
|
def test_executor_by_id(self, input_id) -> None:
|
|
assert ExecutorByID(id=input_id).id == "exekutor_121"
|
|
|
|
@pytest.mark.parametrize("ece", ["089", " 089", "089 "])
|
|
def test_ece_accepted(self, ece) -> None:
|
|
s = ExecutorByECE(ece=ece)
|
|
assert s.ece == "089"
|
|
|
|
@pytest.mark.parametrize("ece", ["", " ", None])
|
|
def test_ece_required(self, ece) -> None:
|
|
with pytest.raises(ValidationError):
|
|
ExecutorByECE(ece=ece)
|
|
|
|
class TestOptionalFields:
|
|
"""
|
|
Checks the operation of optional fields
|
|
and the independence of parameters.
|
|
"""
|
|
|
|
def test_facet_filter_accepts_list(self) -> None:
|
|
s = CourtSearch(
|
|
typSuduFacetFilter=["Okresný súd", "Krajský súd"],
|
|
krajFacetFilter=["Bratislavský kraj"]
|
|
)
|
|
assert len(s.typSuduFacetFilter) == 2
|
|
assert s.krajFacetFilter == ["Bratislavský kraj"]
|
|
|
|
def test_date_fields_are_independent(self) -> None:
|
|
s = DecisionSearch(vydaniaOd="01.01.2024")
|
|
assert s.vydaniaOd == "01.01.2024"
|
|
assert s.vydaniaDo is None
|
|
|
|
class TestSearchSchemas:
|
|
"""
|
|
Checks the validity of search schemes
|
|
and basic fields.
|
|
"""
|
|
|
|
def test_empty_search_is_valid(self, all_search) -> None:
|
|
for cls in all_search:
|
|
assert cls() is not None
|
|
|
|
def test_civil_proceeding_search_bool(self) -> None:
|
|
cp = CivilProceedingsSearch(verejneVyhlasenie=True)
|
|
assert cp.verejneVyhlasenie is True
|
|
|
|
|
|
class TestAutocompleteCommon:
|
|
"""
|
|
Checks common autocomplete behavior
|
|
(query, limit, defaults, validation).
|
|
"""
|
|
|
|
def test_empty_is_valid(self, all_autocomplete) -> None:
|
|
for cls in all_autocomplete:
|
|
assert cls() is not None
|
|
|
|
def test_query_accepts_string(self, all_autocomplete) -> None:
|
|
for cls in all_autocomplete:
|
|
s = cls(query="test")
|
|
assert s.query == "test"
|
|
|
|
def test_query_none_by_default(self, all_autocomplete) -> None:
|
|
for cls in all_autocomplete:
|
|
assert cls().query is None
|
|
|
|
@pytest.mark.parametrize("limit", [0, -1, -100])
|
|
def test_invalid_limit(self, limit, all_autocomplete) -> None:
|
|
for cls in all_autocomplete:
|
|
with pytest.raises(ValidationError):
|
|
cls(limit=limit)
|
|
|
|
|
|
class TestAutocompleteUniqueFields:
|
|
"""
|
|
Checks specific fields of various
|
|
autocomplete schemes.
|
|
"""
|
|
|
|
def test_judge_autocomplete_giud_sud(self) -> None:
|
|
s = JudgeAutocomplete(guidSud="sud_175")
|
|
assert s.guidSud == "sud_175"
|
|
|
|
def test_judge_autocomplete_guid_sud_none_by_default(self) -> None:
|
|
s = JudgeAutocomplete()
|
|
assert s.guidSud is None
|
|
|
|
def test_civil_autocomplete_verejne_vyhlasenie(self) -> None:
|
|
s = CivilProceedingsAutocomplete(verejneVyhlasenie=True)
|
|
assert s.verejneVyhlasenie is True
|
|
|
|
def test_civil_autocomplete_guid_sudca(self) -> None:
|
|
s = CivilProceedingsAutocomplete(guidSudca="sudca_1")
|
|
assert s.guidSudca == "sudca_1"
|
|
|
|
def test_decision_autocomplete_guid_sud(self) -> None:
|
|
s = DecisionAutocomplete(guidSud="sud_100")
|
|
assert s.guidSud == "sud_100"
|
|
|
|
def test_contract_autocomplete_guid_sud(self) -> None:
|
|
s = ContractAutocomplete(guidSud="sud_100")
|
|
assert s.guidSud == "sud_100"
|