File size: 1,996 Bytes
7554bb0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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