use deepseek_protocol::{EventFrame, ThreadListParams, ThreadRequest, ThreadResumeParams}; #[test] fn thread_resume_params_round_trip() { let request = ThreadRequest::Resume(ThreadResumeParams { thread_id: "thread-123".to_string(), history: None, path: None, model: Some("deepseek-v4-pro".to_string()), model_provider: Some("deepseek".to_string()), cwd: None, approval_policy: Some("on-request".to_string()), sandbox: Some("workspace-write".to_string()), config: None, base_instructions: Some("base".to_string()), developer_instructions: Some("dev".to_string()), personality: Some("default".to_string()), persist_extended_history: true, }); let encoded = serde_json::to_string(&request).expect("serialize request"); let decoded: ThreadRequest = serde_json::from_str(&encoded).expect("deserialize request"); match decoded { ThreadRequest::Resume(params) => { assert_eq!(params.thread_id, "thread-123"); assert_eq!(params.model.as_deref(), Some("deepseek-v4-pro")); assert!(params.persist_extended_history); } other => panic!("unexpected request: {other:?}"), } } #[test] fn thread_list_params_defaults_are_serializable() { let request = ThreadRequest::List(ThreadListParams { include_archived: false, limit: Some(20), }); let encoded = serde_json::to_string_pretty(&request).expect("serialize list request"); assert!(encoded.contains("include_archived")); } #[test] fn event_frame_serialization_contains_expected_tag() { let frame = EventFrame::TurnComplete { turn_id: "turn-1".to_string(), }; let encoded = serde_json::to_string(&frame).expect("serialize frame"); assert!(encoded.contains("turn_complete")); }