Группы: статистика игроков — все участники (несыгравшие отдельным блоком), строка кликабельна целиком
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -287,6 +287,26 @@ def test_disabled_account_cannot_login(client: TestClient, make_admin):
|
||||
assert guest_dev["is_active"] is False
|
||||
|
||||
|
||||
def test_group_stats_includes_inactive_members(client: TestClient, engine):
|
||||
"""Участники без завершённых партий попадают в отдельный блок inactive (не в provisional)."""
|
||||
me = login(client, "Капитан")
|
||||
gid = client.post(
|
||||
"/api/groups", json={"name": "Эскадра", "expansion_ids": []}, headers=csrf_headers(client)
|
||||
).json()["id"]
|
||||
rookie = add_group_member(engine, gid, "Новобранец")
|
||||
|
||||
stats = client.get(f"/api/groups/{gid}/stats").json()
|
||||
inactive_ids = {e["user_id"] for e in stats["inactive"]}
|
||||
prov_ids = {e["user_id"] for e in stats["provisional"]}
|
||||
lb_ids = {e["user_id"] for e in stats["leaderboard"]}
|
||||
|
||||
# Никто ещё не играл → и владелец, и новобранец в inactive, и нигде больше.
|
||||
assert {me["id"], rookie}.issubset(inactive_ids)
|
||||
assert not ({me["id"], rookie} & (prov_ids | lb_ids))
|
||||
entry = next(e for e in stats["inactive"] if e["user_id"] == rookie)
|
||||
assert entry["games"] == 0 and entry["rank"] is None
|
||||
|
||||
|
||||
def test_tie_ranking_and_points(client: TestClient, engine):
|
||||
"""Ничьи: места 1,2,2 валидны; очки делятся; некорректная расстановка отклоняется."""
|
||||
me = login(client, "A")
|
||||
|
||||
Reference in New Issue
Block a user