feat: US-015 - Integration tests - End-to-end habit flows

This commit is contained in:
Echo
2026-02-10 17:41:50 +00:00
parent ae06e84070
commit c5a0114eaf
2 changed files with 565 additions and 2 deletions

View File

@@ -12,6 +12,7 @@ from typing import Dict, List, Any, Optional
def calculate_streak(habit: Dict[str, Any]) -> int:
"""
Calculate the current streak for a habit based on its frequency type.
Skips maintain the streak (don't break it) but don't count toward the total.
Args:
habit: Dict containing habit data with frequency, completions, etc.
@@ -52,16 +53,23 @@ def calculate_streak(habit: Dict[str, Any]) -> int:
def _calculate_daily_streak(completions: List[Dict[str, Any]]) -> int:
"""Calculate streak for daily habits (consecutive days)."""
"""
Calculate streak for daily habits (consecutive days).
Skips maintain the streak (don't break it) but don't count toward the total.
"""
streak = 0
today = datetime.now().date()
expected_date = today
for completion in completions:
completion_date = datetime.fromisoformat(completion["date"]).date()
completion_type = completion.get("type", "check")
if completion_date == expected_date:
streak += 1
# Only count 'check' completions toward streak total
# 'skip' completions maintain the streak but don't extend it
if completion_type == "check":
streak += 1
expected_date = completion_date - timedelta(days=1)
elif completion_date < expected_date:
# Gap found, streak breaks