97 lines
3.2 KiB
JSON
97 lines
3.2 KiB
JSON
{
|
|
"release_decision": "PRODUCTION READY",
|
|
"total_tests": 11,
|
|
"passed_tests": 11,
|
|
"failed_tests": 0,
|
|
"security_score": 100.0,
|
|
"results": [
|
|
{
|
|
"test_id": "AUTH-001",
|
|
"category": "Authentication",
|
|
"name": "Reject request without token (401)",
|
|
"passed": true,
|
|
"status_code": 401,
|
|
"details": "{'detail': 'Authentication credentials required. Please provide X-API-Key or Bearer token.'}"
|
|
},
|
|
{
|
|
"test_id": "AUTH-002",
|
|
"category": "Authentication",
|
|
"name": "Reject request with invalid token (401)",
|
|
"passed": true,
|
|
"status_code": 401,
|
|
"details": "{'detail': 'Invalid authentication token or API key.'}"
|
|
},
|
|
{
|
|
"test_id": "AUTH-003",
|
|
"category": "Authentication",
|
|
"name": "Accept request with valid patient token (200)",
|
|
"passed": true,
|
|
"status_code": 200,
|
|
"details": "Session A: ONB-7504201F"
|
|
},
|
|
{
|
|
"test_id": "AUTH-004",
|
|
"category": "Authentication",
|
|
"name": "Create Patient B session cleanly",
|
|
"passed": true,
|
|
"status_code": 200,
|
|
"details": "Session B: ONB-1DFF6BAF"
|
|
},
|
|
{
|
|
"test_id": "IDOR-001",
|
|
"category": "Authorization / IDOR",
|
|
"name": "Prevent Patient B from accessing Patient A session (403)",
|
|
"passed": true,
|
|
"status_code": 403,
|
|
"details": "{'detail': 'Forbidden: You do not have authorization to access or modify this patient onboarding session.'}"
|
|
},
|
|
{
|
|
"test_id": "IDOR-002",
|
|
"category": "Authorization / IDOR",
|
|
"name": "Prevent Patient B from completing Patient A session (403)",
|
|
"passed": true,
|
|
"status_code": 403,
|
|
"details": "{'detail': 'Forbidden: You do not have authorization to complete this onboarding session.'}"
|
|
},
|
|
{
|
|
"test_id": "VAL-001",
|
|
"category": "Input Validation",
|
|
"name": "Reject negative age input (age = -50 -> 422)",
|
|
"passed": true,
|
|
"status_code": 422,
|
|
"details": "{'detail': [{'type': 'greater_than_equal', 'loc': ['body', 'patient', 'age'], 'msg': 'Input should be greater than or equal to 0', 'input': -50, 'ctx': {'ge': 0}}]}"
|
|
},
|
|
{
|
|
"test_id": "VAL-002",
|
|
"category": "Input Validation",
|
|
"name": "Reject age above 120 (age = 150 -> 422)",
|
|
"passed": true,
|
|
"status_code": 422,
|
|
"details": "{'detail': [{'type': 'less_than_equal', 'loc': ['body', 'patient', 'age'], 'msg': 'Input should be less than or equal to 120', 'input': 150, 'ctx': {'le': 120}}]}"
|
|
},
|
|
{
|
|
"test_id": "LIF-001",
|
|
"category": "Session Lifecycle",
|
|
"name": "First completion returns 200 OK (completed)",
|
|
"passed": true,
|
|
"status_code": 200,
|
|
"details": "Status: completed"
|
|
},
|
|
{
|
|
"test_id": "LIF-002",
|
|
"category": "Session Lifecycle",
|
|
"name": "Second completion is idempotent (200 OK already_completed)",
|
|
"passed": true,
|
|
"status_code": 200,
|
|
"details": "Status: completed"
|
|
},
|
|
{
|
|
"test_id": "CORS-001",
|
|
"category": "CORS Policy",
|
|
"name": "Verify trusted origin CORS headers (No wildcard with credentials)",
|
|
"passed": true,
|
|
"status_code": 200,
|
|
"details": "Origin: 'http://localhost:5173', Credentials: 'true'"
|
|
}
|
|
]
|
|
} |