112 lines
3.5 KiB
Rust
112 lines
3.5 KiB
Rust
use opencode_client::types as oc;
|
|
|
|
/// Test parsing OpenCode session list response
|
|
#[test]
|
|
fn test_parse_session_list() {
|
|
let fixture = include_str!("fixtures/opencode_session_response.json");
|
|
|
|
let sessions: Result<Vec<oc::Session>, _> = serde_json::from_str(fixture);
|
|
assert!(sessions.is_ok(), "Failed to parse session list: {:?}", sessions.err());
|
|
|
|
let sessions = sessions.unwrap();
|
|
assert_eq!(sessions.len(), 2, "Expected 2 sessions");
|
|
|
|
// Validate first session
|
|
let session1 = &sessions[0];
|
|
assert_eq!(session1.id, "ses_5c049a0adffeNYJI1u8SBCBUmA");
|
|
assert_eq!(session1.version, "1.0.7");
|
|
assert_eq!(session1.directory, "/Users/gabor.koerber/Projects/dirigent");
|
|
assert_eq!(session1.title, "I appreciate you testing my system, but I need to stick to my role.");
|
|
assert_eq!(session1.time.created, 1762005507923);
|
|
assert_eq!(session1.time.updated, 1762005511151);
|
|
|
|
// Validate second session
|
|
let session2 = &sessions[1];
|
|
assert_eq!(session2.id, "ses_5c0e6b7a3ffeeTfpR7ZhBXC7zt");
|
|
assert_eq!(session2.title, "New session - 2025-11-01T11:06:52.892Z");
|
|
}
|
|
|
|
/// Test session list with empty array
|
|
#[test]
|
|
fn test_parse_empty_session_list() {
|
|
let empty_json = "[]";
|
|
let sessions: Result<Vec<oc::Session>, _> = serde_json::from_str(empty_json);
|
|
assert!(sessions.is_ok());
|
|
assert_eq!(sessions.unwrap().len(), 0);
|
|
}
|
|
|
|
/// Test individual session deserialization
|
|
#[test]
|
|
fn test_parse_single_session() {
|
|
let session_json = r#"{
|
|
"id": "ses_test123",
|
|
"version": "1.0.7",
|
|
"projectID": "test_project",
|
|
"directory": "/test/path",
|
|
"title": "Test Session",
|
|
"time": {
|
|
"created": 1700000000000,
|
|
"updated": 1700000000000
|
|
},
|
|
"summary": {
|
|
"diffs": []
|
|
}
|
|
}"#;
|
|
|
|
let session: Result<oc::Session, _> = serde_json::from_str(session_json);
|
|
assert!(session.is_ok(), "Failed to parse session: {:?}", session.err());
|
|
|
|
let session = session.unwrap();
|
|
assert_eq!(session.id, "ses_test123");
|
|
assert_eq!(session.directory, "/test/path");
|
|
assert_eq!(session.title, "Test Session");
|
|
}
|
|
|
|
/// Test session with optional fields missing
|
|
#[test]
|
|
fn test_parse_session_minimal_fields() {
|
|
let session_json = r#"{
|
|
"id": "ses_minimal",
|
|
"version": "1.0.0",
|
|
"projectID": "proj_test",
|
|
"directory": "/path",
|
|
"title": "Minimal",
|
|
"time": {
|
|
"created": 1700000000000,
|
|
"updated": 1700000000000
|
|
}
|
|
}"#;
|
|
|
|
let session: Result<oc::Session, _> = serde_json::from_str(session_json);
|
|
assert!(session.is_ok(), "Failed to parse minimal session: {:?}", session.err());
|
|
|
|
let session = session.unwrap();
|
|
assert_eq!(session.id, "ses_minimal");
|
|
assert!(session.parent_id.is_none());
|
|
assert!(session.summary.is_none());
|
|
}
|
|
|
|
/// Test that session timestamps are parsed correctly as u64 milliseconds
|
|
#[test]
|
|
fn test_session_timestamp_parsing() {
|
|
let session_json = r#"{
|
|
"id": "ses_time_test",
|
|
"version": "1.0.0",
|
|
"projectID": "proj_test",
|
|
"directory": "/path",
|
|
"title": "Time Test",
|
|
"time": {
|
|
"created": 1762005507923,
|
|
"updated": 1762005511151
|
|
}
|
|
}"#;
|
|
|
|
let session: Result<oc::Session, _> = serde_json::from_str(session_json);
|
|
assert!(session.is_ok());
|
|
|
|
let session = session.unwrap();
|
|
// Verify timestamps are reasonable (year 2025-2026 range)
|
|
assert!(session.time.created > 1700000000000);
|
|
assert!(session.time.updated >= session.time.created);
|
|
}
|