Статистика: любимая фракция — только по сознательному выбору игрока
Партии, где фракция выпала рандомом (was_random), в счётчик любимой не идут: рандомная раздача о предпочтениях не говорит. Если игрок ни разу не выбирал фракцию сам — любимой нет вовсе. Лучшая/худшая фракции и остальная статистика считаются по всем партиям, как раньше. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -124,3 +124,62 @@ def test_leaderboard_includes_avatar_url(client: TestClient, engine, monkeypatch
|
||||
headers=csrf_headers(client),
|
||||
)
|
||||
assert "/avatar?v=" in entry_for(me["id"])["avatar_url"] # после загрузки — ссылка
|
||||
|
||||
|
||||
def test_most_played_faction_ignores_random(client: TestClient, engine):
|
||||
"""Любимая фракция — только по сознательному выбору: рандомные раздачи не в счёт."""
|
||||
me = login(client, "Фракционер")
|
||||
exps = [e["id"] for e in client.get("/api/expansions").json()]
|
||||
gid = client.post(
|
||||
"/api/groups", json={"name": "Группа", "expansion_ids": exps}, headers=csrf_headers(client)
|
||||
).json()["id"]
|
||||
p2 = add_group_member(engine, gid, "Партнёр")
|
||||
fids = [f["id"] for f in client.get(f"/api/groups/{gid}/factions").json()]
|
||||
|
||||
# Дважды играл фракцией A по рандому, один раз фракцией B — по своему выбору.
|
||||
for _ in range(2):
|
||||
create_finished_match(
|
||||
client,
|
||||
gid,
|
||||
[
|
||||
{"user_id": me["id"], "faction_id": fids[0], "place": 1, "was_random": True},
|
||||
{"user_id": p2, "faction_id": fids[1], "place": 2},
|
||||
],
|
||||
)
|
||||
create_finished_match(
|
||||
client,
|
||||
gid,
|
||||
[
|
||||
{"user_id": me["id"], "faction_id": fids[2], "place": 1},
|
||||
{"user_id": p2, "faction_id": fids[1], "place": 2},
|
||||
],
|
||||
)
|
||||
|
||||
stats = client.get("/api/users/me/stats").json()
|
||||
assert stats["most_played_faction"]["faction_id"] == fids[2] # B, хоть партий с A больше
|
||||
|
||||
# У соперника все фракции выбраны вручную — любимая считается как раньше.
|
||||
login(client, "Партнёр")
|
||||
stats2 = client.get("/api/users/me/stats").json()
|
||||
assert stats2["most_played_faction"]["faction_id"] == fids[1]
|
||||
|
||||
|
||||
def test_most_played_faction_absent_when_all_random(client: TestClient, engine):
|
||||
"""Если игрок ни разу не выбирал фракцию сам — любимой нет вовсе."""
|
||||
me = login(client, "Рандомщик")
|
||||
exps = [e["id"] for e in client.get("/api/expansions").json()]
|
||||
gid = client.post(
|
||||
"/api/groups", json={"name": "Группа", "expansion_ids": exps}, headers=csrf_headers(client)
|
||||
).json()["id"]
|
||||
p2 = add_group_member(engine, gid, "Оппонент")
|
||||
fids = [f["id"] for f in client.get(f"/api/groups/{gid}/factions").json()]
|
||||
create_finished_match(
|
||||
client,
|
||||
gid,
|
||||
[
|
||||
{"user_id": me["id"], "faction_id": fids[0], "place": 1, "was_random": True},
|
||||
{"user_id": p2, "faction_id": fids[1], "place": 2, "was_random": True},
|
||||
],
|
||||
)
|
||||
stats = client.get("/api/users/me/stats").json()
|
||||
assert stats["most_played_faction"] is None
|
||||
|
||||
Reference in New Issue
Block a user