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