Группы: приглашения вместо авто-добавления (согласиться/отказаться)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -15,13 +15,13 @@ os.environ["FS_STARTUP_BOOTSTRAP"] = "0" # тесты сами поднимаю
|
||||
import pytest # noqa: E402
|
||||
from fastapi.testclient import TestClient # noqa: E402
|
||||
from sqlalchemy.pool import StaticPool # noqa: E402
|
||||
from sqlmodel import Session, SQLModel, create_engine # noqa: E402
|
||||
from sqlmodel import Session, SQLModel, create_engine, select # noqa: E402
|
||||
|
||||
import app.models # noqa: F401,E402 (регистрация моделей)
|
||||
from app.core.security import hash_password # noqa: E402
|
||||
from app.db.session import get_session # noqa: E402
|
||||
from app.main import app # noqa: E402
|
||||
from app.models import User # noqa: E402
|
||||
from app.models import AuthIdentity, GroupMember, User # noqa: E402
|
||||
from app.seed.reference_data import seed_reference_data # noqa: E402
|
||||
|
||||
|
||||
@@ -86,6 +86,32 @@ def login(client: TestClient, nickname: str) -> dict:
|
||||
return r.json()
|
||||
|
||||
|
||||
def add_group_member(engine, group_id: int, nickname: str, role: str = "member") -> int:
|
||||
"""Подготовка данных: добавить игрока в группу напрямую (в обход приглашений).
|
||||
|
||||
Создаёт пользователя при отсутствии. Возвращает user_id. Нужен, т.к. через HTTP
|
||||
прямого добавления больше нет — только приглашения (см. invitation_service)."""
|
||||
with Session(engine) as s:
|
||||
user = s.exec(select(User).where(User.nickname == nickname)).first()
|
||||
if user is None:
|
||||
user = User(nickname=nickname, role="player", auth_provider="stub")
|
||||
s.add(user)
|
||||
s.commit()
|
||||
s.refresh(user)
|
||||
# AuthIdentity нужен, чтобы dev-вход (login) нашёл того же игрока, а не создал дубль.
|
||||
s.add(AuthIdentity(user_id=user.id, provider="stub", external_id=nickname))
|
||||
s.commit()
|
||||
exists = s.exec(
|
||||
select(GroupMember).where(
|
||||
GroupMember.group_id == group_id, GroupMember.user_id == user.id
|
||||
)
|
||||
).first()
|
||||
if exists is None:
|
||||
s.add(GroupMember(group_id=group_id, user_id=user.id, role=role))
|
||||
s.commit()
|
||||
return user.id # type: ignore[return-value]
|
||||
|
||||
|
||||
def start_match(client: TestClient, group_id: int, roster: list[dict]):
|
||||
"""roster: [{user_id, faction_id, was_random?}] → ответ старта (in_progress)."""
|
||||
return client.post(
|
||||
|
||||
Reference in New Issue
Block a user