78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
"""Тестируем отправку миссии."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from app.models.artifact import Artifact, ArtifactRarity
|
||
from app.models.mission import Mission, MissionSubmission, SubmissionStatus
|
||
from app.models.user import User, UserRole
|
||
from app.services.mission import approve_submission
|
||
|
||
|
||
def test_approve_submission_rewards(db_session):
|
||
"""После одобрения пилот получает награды."""
|
||
|
||
mission = Mission(title="Сборка спутника", description="Практика", xp_reward=150, mana_reward=90)
|
||
user = User(
|
||
email="pilot@alabuga.space",
|
||
full_name="Пилот",
|
||
role=UserRole.PILOT,
|
||
hashed_password="hash",
|
||
)
|
||
|
||
db_session.add_all([mission, user])
|
||
db_session.flush()
|
||
|
||
submission = MissionSubmission(user_id=user.id, mission_id=mission.id)
|
||
db_session.add(submission)
|
||
db_session.commit()
|
||
db_session.refresh(submission)
|
||
db_session.refresh(user)
|
||
|
||
approve_submission(db_session, submission)
|
||
db_session.refresh(user)
|
||
|
||
assert user.xp == mission.xp_reward
|
||
assert user.mana == mission.mana_reward
|
||
assert submission.status == SubmissionStatus.APPROVED
|
||
|
||
|
||
def test_approve_submission_grants_artifact(db_session):
|
||
"""При наличии артефакта пользователь получает его единожды."""
|
||
|
||
artifact = Artifact(
|
||
name="Значок испытателя",
|
||
description="Выдан за успешную миссию",
|
||
rarity=ArtifactRarity.RARE,
|
||
)
|
||
mission = Mission(
|
||
title="Тестовая миссия",
|
||
description="Описание",
|
||
xp_reward=50,
|
||
mana_reward=20,
|
||
artifact=artifact,
|
||
)
|
||
user = User(
|
||
email="artifact@alabuga.space",
|
||
full_name="Пилот",
|
||
role=UserRole.PILOT,
|
||
hashed_password="hash",
|
||
)
|
||
db_session.add_all([artifact, mission, user])
|
||
db_session.flush()
|
||
|
||
submission = MissionSubmission(user_id=user.id, mission_id=mission.id)
|
||
db_session.add(submission)
|
||
db_session.commit()
|
||
db_session.refresh(submission)
|
||
|
||
approve_submission(db_session, submission)
|
||
db_session.refresh(user)
|
||
|
||
assert len(user.artifacts) == 1
|
||
assert user.artifacts[0].artifact_id == artifact.id
|
||
|
||
# Повторное одобрение не создаёт дубли
|
||
approve_submission(db_session, submission)
|
||
db_session.refresh(user)
|
||
assert len(user.artifacts) == 1
|