Добавлена функция удаления аккаунтов с каскадным удалением из всех записей для дева
This commit is contained in:
@@ -106,6 +106,64 @@ def test_admin_edit_match_and_filters(client: TestClient, make_admin):
|
||||
assert bp["faction_name"] == "Хаоситы"
|
||||
|
||||
|
||||
def test_dev_delete_account_keeps_matches(client: TestClient, make_admin):
|
||||
"""DEV-удаление: аккаунт удаляется, партии живут (игрок вычёркивается),
|
||||
его созданные партии и группы переназначаются на админа."""
|
||||
me = login(client, "Аня") # владелец группы и создатель партии
|
||||
gid = client.post(
|
||||
"/api/groups", json={"name": "Группа", "expansion_ids": []}, headers=csrf_headers(client)
|
||||
).json()["id"]
|
||||
client.post("/api/auth/dev/users", json={"nickname": "Боря"}, headers=csrf_headers(client))
|
||||
b = client.post(
|
||||
f"/api/groups/{gid}/members", json={"nickname": "Боря"}, headers=csrf_headers(client)
|
||||
).json()["user_id"]
|
||||
factions = {f["code"]: f["id"] for f in client.get(f"/api/groups/{gid}/factions").json()}
|
||||
mid = create_finished_match(
|
||||
client,
|
||||
gid,
|
||||
[
|
||||
{"user_id": me["id"], "faction_id": factions["orks"], "place": 1},
|
||||
{"user_id": b, "faction_id": factions["eldar"], "place": 2},
|
||||
],
|
||||
)["id"]
|
||||
|
||||
admin_id = make_admin("admin", "secret123")
|
||||
r = client.post(
|
||||
"/api/admin/auth/login",
|
||||
json={"username": "admin", "password": "secret123"},
|
||||
headers=csrf_headers(client),
|
||||
)
|
||||
assert r.status_code == 200, r.text
|
||||
|
||||
# Удаляем участника Борю → партия жива, его строка участия вычеркнута.
|
||||
r = client.delete(f"/api/admin/dev/users/{b}", headers=csrf_headers(client))
|
||||
assert r.status_code == 200, r.text
|
||||
assert all(u["id"] != b for u in client.get("/api/admin/users").json())
|
||||
detail = client.get(f"/api/admin/matches/{mid}").json()
|
||||
assert [p["user_id"] for p in detail["participants"]] == [me["id"]] # Боря вычеркнут
|
||||
assert detail["player_count"] == 2 # player_count НЕ пересчитывается (осознанно)
|
||||
|
||||
# Удаляем создателя/владельца Аню → партия и группа сохраняются, переходят к админу.
|
||||
r = client.delete(f"/api/admin/dev/users/{me['id']}", headers=csrf_headers(client))
|
||||
assert r.status_code == 200, r.text
|
||||
assert client.get(f"/api/admin/matches/{mid}").json()["created_by"] == admin_id
|
||||
grp = next(g for g in client.get("/api/admin/groups").json() if g["id"] == gid)
|
||||
assert grp["owner_id"] == admin_id
|
||||
|
||||
|
||||
def test_dev_delete_account_rejects_admin(client: TestClient, make_admin):
|
||||
"""Админа удалить нельзя."""
|
||||
admin_id = make_admin("admin", "secret123")
|
||||
r = client.post(
|
||||
"/api/admin/auth/login",
|
||||
json={"username": "admin", "password": "secret123"},
|
||||
headers=csrf_headers(client),
|
||||
)
|
||||
assert r.status_code == 200, r.text
|
||||
r = client.delete(f"/api/admin/dev/users/{admin_id}", headers=csrf_headers(client))
|
||||
assert r.status_code == 422, r.text
|
||||
|
||||
|
||||
def test_admin_rename_faction_system_wide(client: TestClient, make_admin):
|
||||
me = login(client, "Кто-то")
|
||||
gid = client.post(
|
||||
|
||||
Reference in New Issue
Block a user