DKB_ARMKA/api/tests/integration/test_memberships_api_crud_integration.py
PotapovaA ba172f8e99 init
2026-09-15 15:53:46 +03:00

116 lines
4.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from uuid import uuid4
import pytest
@pytest.mark.asyncio
async def test_memberships_crud_integration(api_client):
suffix = uuid4().hex[:6].upper()
type_code = f"T{suffix}"
region_id = f"region-{suffix}"
region_code = f"RC{suffix}"
group_id = f"G{suffix}"
crm_group_id = f"CRM{suffix}"
inn = f"77{uuid4().int % 10**8:08d}"
org_type_resp = await api_client.post(
"/api/v1/org-types",
json={
"type_code": type_code,
"type_name": f"Тип {suffix}",
"description": "Тестовый тип организации",
},
)
assert org_type_resp.status_code == 201, org_type_resp.text
crm_region_resp = await api_client.post(
"/api/v1/crm-regions",
json={
"id": region_id,
"region_code": region_code,
"region_name": f"Регион {suffix}",
"crm_system_id": f"S{suffix}",
},
)
assert crm_region_resp.status_code == 201, crm_region_resp.text
group_resp = await api_client.post(
"/api/v1/groups",
json={
"id": group_id,
"crm_group_id": crm_group_id,
"group_name": f"Группа {suffix}",
"region_code": region_code,
"is_active": True,
},
)
assert group_resp.status_code == 201, group_resp.text
organization_resp = await api_client.post(
"/api/v1/organizations",
json={
"inn": inn,
"kpp": "770101001",
"full_name": f"ООО Тест {suffix}",
"short_name": f"Тест {suffix}",
"org_type_code": type_code,
"is_resident": True,
},
)
assert organization_resp.status_code == 201, organization_resp.text
org_id = organization_resp.json()["org_id"]
membership_create_resp = await api_client.post(
"/api/v1/memberships",
json={
"group_id": group_id,
"org_id": org_id,
"is_gsk": True,
"is_gsz": False,
"control_type": "CTRL",
"comment": "Тестовая связь",
},
)
assert membership_create_resp.status_code == 201, membership_create_resp.text
membership_payload = membership_create_resp.json()
membership_id = membership_payload["membership_id"]
assert membership_payload["inn"] == inn
assert membership_payload["group_id"] == group_id
assert membership_payload["crm_group_id"] == crm_group_id
list_resp = await api_client.get(
f"/api/v1/memberships?group_id={group_id}&inn={inn}&active_only=true"
)
assert list_resp.status_code == 200, list_resp.text
listed = list_resp.json()
assert any(row["membership_id"] == membership_id for row in listed)
get_resp = await api_client.get(f"/api/v1/memberships/{membership_id}")
assert get_resp.status_code == 200, get_resp.text
assert get_resp.json()["membership_id"] == membership_id
update_resp = await api_client.patch(
f"/api/v1/memberships/{membership_id}",
json={"is_gsz": True, "comment": "Обновлено"},
)
assert update_resp.status_code == 200, update_resp.text
updated_payload = update_resp.json()
assert updated_payload["is_gsz"] is True
delete_resp = await api_client.delete(f"/api/v1/memberships/{membership_id}")
assert delete_resp.status_code == 204, delete_resp.text
active_list_resp = await api_client.get(
f"/api/v1/memberships?group_id={group_id}&inn={inn}&active_only=true"
)
assert active_list_resp.status_code == 200, active_list_resp.text
assert all(row["membership_id"] != membership_id for row in active_list_resp.json())
all_list_resp = await api_client.get(
f"/api/v1/memberships?group_id={group_id}&inn={inn}&active_only=false"
)
assert all_list_resp.status_code == 200, all_list_resp.text
all_rows = all_list_resp.json()
deactivated = next(row for row in all_rows if row["membership_id"] == membership_id)
assert deactivated["membership_to"] is not None