File size: 3,269 Bytes
aaa634c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
74
75
76
77
78
79
80
import os
import sys

# Add root folder to sys.path so we can import sandbox and sql_playground
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import sandbox
import sql_playground

def test_python_sandbox():
    print("--- Testing Python Sandbox ---")
    
    # 1. Correct Submission Test
    correct_code = "def solve(a, b):\n    return a + b"
    test_cases = [
        {"input": [1, 2], "expected": 3},
        {"input": [10, -5], "expected": 5}
    ]
    res_correct = sandbox.run_python_sandbox(correct_code, test_cases)
    print("Correct Code Result:")
    print("Success:", res_correct.get("success"))
    print("Sandbox Type:", res_correct.get("sandbox_type"))
    if res_correct.get("success"):
        for r in res_correct["results"]:
            print(f"  Test {r['index'] + 1}: status={r['status']}, got={r['got']}")
            
    # 2. Logic Failure Test
    failed_code = "def solve(a, b):\n    return a - b"
    res_failed = sandbox.run_python_sandbox(failed_code, test_cases)
    print("\nFailed Code Result:")
    print("Success:", res_failed.get("success"))
    if res_failed.get("success"):
        for r in res_failed["results"]:
            print(f"  Test {r['index'] + 1}: status={r['status']}, got={r['got']}, expected={r['expected']}")

def test_sql_playground():
    print("\n--- Testing SQL Playground ---")
    user_id = "test_developer_123"
    
    challenge = {
        "title": "High Earners",
        "objective": "Find employees with salary greater than 85000",
        "ddl": "CREATE TABLE employees (id INTEGER PRIMARY KEY, name TEXT, department TEXT, salary INTEGER);",
        "inserts": "INSERT INTO employees VALUES (1, 'Alice', 'Engineering', 95000); INSERT INTO employees VALUES (2, 'Bob', 'HR', 75000); INSERT INTO employees VALUES (3, 'Charlie', 'Engineering', 100000);",
        "validation_query": "SELECT name FROM employees WHERE salary > 85000;",
        "challenge_type": "SELECT",
        "points": 150
    }
    
    # 1. Init DB
    init_res = sql_playground.init_user_db(user_id, challenge)
    print("DB Init Result:", init_res)
    
    # 2. Run correct SELECT query
    correct_query = "SELECT name FROM employees WHERE salary > 85000"
    res_correct = sql_playground.run_user_query(user_id, correct_query, challenge)
    print("\nCorrect Query Result:")
    print("Success:", res_correct.get("success"))
    print("Is Correct:", res_correct.get("is_correct"))
    print("Columns:", res_correct.get("columns"))
    print("Rows:", res_correct.get("rows"))
    
    # 3. Run incorrect SELECT query
    incorrect_query = "SELECT name FROM employees"
    res_incorrect = sql_playground.run_user_query(user_id, incorrect_query, challenge)
    print("\nIncorrect Query Result:")
    print("Success:", res_incorrect.get("success"))
    print("Is Correct:", res_incorrect.get("is_correct"))
    
    # 4. Test safety check
    unsafe_query = "SELECT name FROM employees; DROP TABLE employees;"
    res_unsafe = sql_playground.run_user_query(user_id, unsafe_query, challenge)
    print("\nUnsafe Query Result:")
    print("Success:", res_unsafe.get("success"))
    print("Error:", res_unsafe.get("error"))

if __name__ == '__main__':
    test_python_sandbox()
    test_sql_playground()