Completed and abandoned habits were both lumped under a single terminal state, making it impossible to tell "finished successfully" apart from "gave up" when reviewing habit history.
46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from app.models.habit import ALL_WEEKDAYS_MASK, HabitStatus, HabitType
|
|
from app.schemas.habit import HabitCreate
|
|
from app.services import habit_service
|
|
|
|
|
|
def _make_habit(db_session, user_id, name="테스트 습관", **overrides):
|
|
data = HabitCreate(
|
|
name=name,
|
|
habit_type=overrides.pop("habit_type", HabitType.BUILD),
|
|
weekdays_mask=overrides.pop("weekdays_mask", ALL_WEEKDAYS_MASK),
|
|
)
|
|
return habit_service.create_habit(db_session, user_id, data)
|
|
|
|
|
|
def test_abandon_habit_page_moves_habit_to_abandoned_tab(auth_client, db_session, test_user):
|
|
habit = _make_habit(db_session, test_user.id, name="포기할 습관")
|
|
|
|
response = auth_client.post(f"/habits/{habit.id}/abandon")
|
|
assert response.status_code == 200
|
|
assert response.headers["hx-redirect"] == "/habits?tab=build"
|
|
|
|
db_session.refresh(habit)
|
|
assert habit.status == HabitStatus.ABANDONED
|
|
|
|
abandoned_tab = auth_client.get("/habits?tab=abandoned")
|
|
assert "포기할 습관" in abandoned_tab.text
|
|
|
|
|
|
def test_abandon_other_users_habit_returns_404(auth_client, db_session, other_user):
|
|
others_habit = _make_habit(db_session, other_user.id, name="남의 습관")
|
|
|
|
response = auth_client.post(f"/habits/{others_habit.id}/abandon")
|
|
assert response.status_code == 404
|
|
|
|
|
|
def test_reactivate_habit_page_redirects_to_abandoned_tab(auth_client, db_session, test_user):
|
|
habit = _make_habit(db_session, test_user.id, name="다시 시작할 습관")
|
|
habit_service.abandon_habit(db_session, habit)
|
|
|
|
response = auth_client.post(f"/habits/{habit.id}/reactivate")
|
|
assert response.status_code == 200
|
|
assert response.headers["hx-redirect"] == "/habits?tab=abandoned"
|
|
|
|
db_session.refresh(habit)
|
|
assert habit.status == HabitStatus.ACTIVE
|