116 lines
4.0 KiB
Python
116 lines
4.0 KiB
Python
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
|