DFiP_Budget_planing/api/tests/integration/test_summary_api_smoke.py

167 lines
4.8 KiB
Python

import pytest
XLSX_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
@pytest.mark.parametrize(
"sheet",
["FORM_1", "FORM_2", "FORM_3", "FORM_4", "MAIN"],
)
def test_summary_sheets_smoke(client, admin_tokens, auth_headers, sheet):
response = client.get(
f"/api/v1/svod/1/{sheet}/2026",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200, f"sheet={sheet}: {response.text}"
payload = response.json()
assert "result" in payload
assert "count" in payload
assert isinstance(payload["result"], list)
def test_summary_sheet_with_org_ids(client, admin_tokens, auth_headers):
response = client.get(
"/api/v1/svod/1/FORM_1/2026?org_ids=1,2,3",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200
payload = response.json()
assert "result" in payload
assert payload["result"]
row = payload["result"][0]
assert "row_type" in row
assert "depth" in row
assert "data" in row
def test_summary_sheet_unknown(client, admin_tokens, auth_headers):
response = client.get(
"/api/v1/svod/1/unknown_sheet/2026",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 404
@pytest.mark.parametrize("sheet", ["GO", "RF"])
def test_summary2_sheets_smoke(client, admin_tokens, auth_headers, sheet):
response = client.get(
f"/api/v1/svod/2/{sheet}/2026",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200, f"sheet={sheet}: {response.text}"
payload = response.json()
assert "result" in payload
assert "count" in payload
assert isinstance(payload["result"], list)
if payload["result"]:
row = payload["result"][0]
assert row["row_type"] == "INPUT"
assert row["depth"] == 3
assert "sort_order" in row
assert "data" in row
data = row["data"]
header = data["header"]
assert {
"org_name",
"source_id",
"smeta_type",
"source_form",
"source_org_unit_id",
"smeta_direction",
} <= header.keys()
assert "source_sheet" not in data
assert "source_sheet" not in header
assert {
"plan",
"sequestration",
"reserve",
"contract_summary",
"allocation",
"collegial",
"ckk",
"contract_detail",
"booking",
"q1",
"q2",
"q3",
"q4",
} <= data.keys()
def test_summary2_sheet_with_org_ids(client, admin_tokens, auth_headers):
response = client.get(
"/api/v1/svod/2/GO/2026?org_ids=1,2,3",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200
def test_summary2_pagination(client, admin_tokens, auth_headers):
response = client.get(
"/api/v1/svod/2/GO/2026?offset=0&limit=2",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200
payload = response.json()
assert payload["count"] <= 2
assert len(payload["result"]) <= 2
@pytest.mark.parametrize("sort_by", ["org_name", "section_code"])
@pytest.mark.parametrize("sort_direction", ["asc", "desc"])
def test_summary2_sorting(
client,
admin_tokens,
auth_headers,
sort_by,
sort_direction,
):
response = client.get(
f"/api/v1/svod/2/GO/2026?limit=2&sort_by={sort_by}&sort_direction={sort_direction}",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200
@pytest.mark.parametrize(
"query",
["offset=-1", "limit=0", "sort_by=bad", "sort_direction=bad"],
)
def test_summary2_invalid_pagination(client, admin_tokens, auth_headers, query):
response = client.get(
f"/api/v1/svod/2/GO/2026?{query}",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 422
def test_summary2_sheet_unknown(client, admin_tokens, auth_headers):
response = client.get(
"/api/v1/svod/2/unknown/2026",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 404
def test_export_summary1_smoke(client, admin_tokens, auth_headers):
response = client.get(
"/api/v1/export/summary/1/MAIN/2026",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200
assert response.headers["content-type"] == XLSX_CONTENT_TYPE
assert response.content.startswith(b"PK")
def test_export_summary2_smoke(client, admin_tokens, auth_headers):
response = client.get(
"/api/v1/export/summary/2/GO/2026",
headers=auth_headers(admin_tokens),
)
assert response.status_code == 200
assert response.headers["content-type"] == XLSX_CONTENT_TYPE
assert response.content.startswith(b"PK")