ai-lawyer-agent/testing/tests/test_api.py
2026-03-23 02:55:42 +01:00

152 lines
5.0 KiB
Python

import pytest
import httpx
from api.config import JUSTICE_API_BASE, HTTP_TIMEOUT
HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0.0.0 Safari/537.36",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "sk-SK,sk;q=0.9",
"Referer": "https://obcan.justice.sk/",
"Origin": "https://obcan.justice.sk",
}
def api_available() -> bool:
try:
r = httpx.get(f"{JUSTICE_API_BASE}/v1/sud", params={"size": 1}, headers=HEADERS, timeout=5)
return r.status_code == 200
except Exception:
return False
skip_if_offline = pytest.mark.skipif(
not api_available(),
reason="justice.sk API is not reachable"
)
@pytest.fixture(scope="module")
def client():
with httpx.Client(headers=HEADERS, timeout=HTTP_TIMEOUT, follow_redirects=True) as c:
yield c
@skip_if_offline
class TestCourtsEndpoint:
def test_returns_200(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sud", params={"size": 5})
assert r.status_code == 200
def test_response_has_content_key(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sud", params={"size": 5})
data = r.json()
assert "content" in data
def test_total_elements_is_positive(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sud", params={"size": 1})
data = r.json()
assert data.get("totalElements", 0) > 0
def test_court_by_id_returns_valid_record(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sud/sud_175")
assert r.status_code == 200
data = r.json()
assert "id" in data or "nazov" in data
def test_court_autocomplete_returns_list(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sud/autocomplete", params={"query": "Bratislava", "limit": 5})
assert r.status_code == 200
assert isinstance(r.json(), list)
def test_nonexistent_court_returns_404(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sud/sud_999999999")
assert r.status_code == 404
@skip_if_offline
class TestJudgesEndpoint:
def test_judge_search_returns_200(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sudca", params={"size": 5})
assert r.status_code == 200
def test_judge_autocomplete_returns_results(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sudca/autocomplete", params={"query": "Novák", "limit": 10})
assert r.status_code == 200
def test_judge_search_by_kraj(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sudca", params={
"krajFacetFilter": "Bratislavský kraj",
"size": 5
})
assert r.status_code == 200
def test_judge_search_pagination_page_zero(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/sudca", params={"page": 0, "size": 10})
data = r.json()
assert "content" in data
@skip_if_offline
class TestDecisionsEndpoint:
def test_decision_search_returns_200(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/rozhodnutie", params={"size": 3})
assert r.status_code == 200
def test_decision_search_with_date_range(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/rozhodnutie", params={
"vydaniaOd": "01.01.2023",
"vydaniaDo": "31.12.2023",
"size": 3,
})
assert r.status_code == 200
def test_decision_autocomplete(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/rozhodnutie/autocomplete", params={"query": "Rozsudok", "limit": 5})
assert r.status_code == 200
@skip_if_offline
class TestContractsEndpoint:
def test_contract_search_returns_200(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/zmluvy", params={"size": 5})
assert r.status_code == 200
def test_contract_search_by_typ_dokumentu(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/zmluvy", params={
"typDokumentuFacetFilter": "ZMLUVA",
"size": 3,
})
assert r.status_code == 200
@skip_if_offline
class TestCivilProceedingsEndpoint:
def test_civil_proceedings_returns_200(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/obcianPojednavania", params={"size": 3})
assert r.status_code == 200
def test_civil_proceedings_date_filter(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/obcianPojednavania", params={
"pojednavaniaOd": "01.01.2024",
"pojednavaniaDo": "31.01.2024",
"size": 3,
})
assert r.status_code == 200
@skip_if_offline
class TestAdminProceedingsEndpoint:
def test_admin_proceedings_returns_200(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/spravneKonanie", params={"size": 3})
assert r.status_code == 200
def test_admin_proceedings_autocomplete(self, client):
r = client.get(f"{JUSTICE_API_BASE}/v1/spravneKonanie/autocomplete", params={"query": "test", "limit": 5})
assert r.status_code == 200