File size: 1,452 Bytes
90fc756
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from sql_query_reviewer.models import SQLReviewAction, TaskRecord
from server.grader import grade_episode, match_issue, validate_fix
from server.environment import SQLReviewEnvironment


def test_match_issue_finds_expected_easy_issue() -> None:
    environment = SQLReviewEnvironment()
    task = environment.tasks["easy_002"]
    action = SQLReviewAction(
        action_type="identify_issue",
        issue_category="syntax",
        issue_description="The query is missing the FROM clause before users.",
        confidence=0.95,
    )

    match, score = match_issue(action, task.ground_truth_issues, set())

    assert match is not None
    assert match.id == "easy_002_missing_from"
    assert score >= 0.35


def test_validate_fix_accepts_expected_remediation() -> None:
    environment = SQLReviewEnvironment()
    task = environment.tasks["easy_003"]
    assert validate_fix("SELECT order_id, total FROM orders WHERE shipped_at IS NULL;", task.ground_truth_issues[0])


def test_grade_episode_is_deterministic_and_bounded() -> None:
    environment = SQLReviewEnvironment()
    task = environment.tasks["medium_001"]

    first = grade_episode({"medium_001_select_star"}, task.ground_truth_issues, total_steps=2, max_steps=5, false_positive_count=1)
    second = grade_episode({"medium_001_select_star"}, task.ground_truth_issues, total_steps=2, max_steps=5, false_positive_count=1)

    assert first == second
    assert 0.0 <= first <= 1.0