add abandoned status to distinguish given-up habits from completed ones

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.
This commit is contained in:
2026-07-17 20:19:35 +09:00
parent d0dd530e26
commit 55918d56d1
11 changed files with 167 additions and 3 deletions
+45
View File
@@ -0,0 +1,45 @@
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