import pytest from src.core.progress_tracker import ProgressTracker def test_add_xp_unlocks_badge(): tracker = ProgressTracker() # Earn 60 XP – should unlock "First Steps" (threshold 50) tracker.add_xp(60) assert tracker.xp == 60 assert "First Steps" in tracker.badges def test_increment_tasks_unlocks_wordsmith(): tracker = ProgressTracker() # Complete 10 tasks for _ in range(10): tracker.increment_tasks() assert tracker.tasks_completed == 10 assert "Wordsmith" in tracker.badges def test_html_dashboard_reflects_state(): tracker = ProgressTracker() tracker.add_xp(120) html = tracker.html_dashboard() # Ensure XP appears in the HTML assert str(tracker.xp) in html # Earn badge and verify it's in HTML assert "First Steps" in html def test_multiple_xp_increments(): tracker = ProgressTracker() tracker.add_xp(30) tracker.add_xp(40) assert tracker.xp == 70 assert "First Steps" in tracker.badges # Threshold 50 XP def test_skill_tracking(): tracker = ProgressTracker() tracker.update_skill("grammar", 5) tracker.update_skill("vocabulary", 3) assert tracker.skills["grammar"] == 5 assert tracker.skills["vocabulary"] == 3 assert "grammar: 5" in tracker.html_dashboard() def test_edge_cases(): tracker = ProgressTracker() # Test XP negativo tracker.add_xp(-10) assert tracker.xp == 0 # Teste muitas tarefas for _ in range(10): tracker.increment_tasks() assert tracker.tasks_completed == 10 assert "Wordsmith" in tracker.badges def test_badge_progression(): tracker = ProgressTracker() # Teste progressão de badges assert len(tracker.badges) == 0 tracker.add_xp(40) assert len(tracker.badges) == 0 # Ainda não atingiu threshold tracker.add_xp(20) # Total 60 XP assert "First Steps" in tracker.badges tracker.add_xp(200) # Total 260 XP assert "Getting Warmer" in tracker.badges