167 lines
4.8 KiB
Python
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")
|