autoagents_core/agent/
task.rs1#[cfg(not(target_arch = "wasm32"))]
2use crate::actor::{ActorMessage, CloneableMessage};
3
4pub use autoagents_protocol::Task;
5
6#[cfg(not(target_arch = "wasm32"))]
7impl ActorMessage for Task {}
8#[cfg(not(target_arch = "wasm32"))]
9impl CloneableMessage for Task {}
10
11#[cfg(test)]
12mod tests {
13 use super::Task;
14 use autoagents_protocol::ImageMime;
15 use serde_json::json;
16
17 #[test]
18 fn test_task_creation() {
19 let task = Task::new("Test task");
20
21 assert_eq!(task.prompt, "Test task");
22 assert!(!task.completed);
23 assert!(task.result.is_none());
24 assert!(!task.submission_id.is_nil());
25 }
26
27 #[test]
28 fn test_task_creation_with_string() {
29 let task_str = "Another test task".to_string();
30 let task = Task::new(task_str);
31
32 assert_eq!(task.prompt, "Another test task");
33 }
34
35 #[test]
36 fn test_task_serialization() {
37 let task = Task::new("Serialize me");
38
39 let serialized = serde_json::to_string(&task).unwrap();
40 assert!(serialized.contains("Serialize me"));
41 assert!(serialized.contains("submission_id"));
42 assert!(serialized.contains("completed"));
43
44 let deserialized: Task = serde_json::from_str(&serialized).unwrap();
45 assert_eq!(deserialized.prompt, task.prompt);
46 assert_eq!(deserialized.submission_id, task.submission_id);
47 assert_eq!(deserialized.completed, task.completed);
48 }
49
50 #[test]
51 fn test_task_with_result() {
52 let mut task = Task::new("Task with result");
53 let result_value = json!({"output": "success", "value": 42});
54 task.result = Some(result_value.clone());
55 task.completed = true;
56
57 assert!(task.completed);
58 assert_eq!(task.result, Some(result_value));
59 }
60
61 #[test]
62 fn test_task_unique_submission_ids() {
63 let task1 = Task::new("Task 1");
64 let task2 = Task::new("Task 2");
65
66 assert_ne!(task1.submission_id, task2.submission_id);
67 }
68
69 #[test]
70 fn test_task_clone() {
71 let original = Task::new("Original task");
72 let cloned = original.clone();
73
74 assert_eq!(original.prompt, cloned.prompt);
75 assert_eq!(original.submission_id, cloned.submission_id);
76 assert_eq!(original.completed, cloned.completed);
77 assert_eq!(original.result, cloned.result);
78 }
79
80 #[test]
81 fn test_task_debug() {
82 let task = Task::new("Debug test");
83 let debug_str = format!("{task:?}");
84
85 assert!(debug_str.contains("Task"));
86 assert!(debug_str.contains("Debug test"));
87 }
88
89 #[test]
90 fn test_task_with_image() {
91 let image_data = vec![0x89, 0x50, 0x4E, 0x47];
92 let task = Task::new_with_image("Task with image", ImageMime::PNG, image_data.clone());
93
94 assert_eq!(task.prompt, "Task with image");
95 assert!(task.image.is_some());
96 if let Some((mime, data)) = &task.image {
97 assert_eq!(*mime, ImageMime::PNG);
98 assert_eq!(*data, image_data);
99 }
100 assert!(!task.completed);
101 assert!(task.result.is_none());
102 }
103
104 #[test]
105 fn test_task_without_image() {
106 let task = Task::new("Task without image");
107
108 assert_eq!(task.prompt, "Task without image");
109 assert!(task.image.is_none());
110 assert!(!task.completed);
111 assert!(task.result.is_none());
112 }
113
114 #[test]
115 fn test_task_image_serialization() {
116 let image_data = vec![0xFF, 0xD8, 0xFF, 0xE0];
117 let task = Task::new_with_image("Serialize with image", ImageMime::JPEG, image_data);
118
119 let serialized = serde_json::to_string(&task).unwrap();
120 assert!(serialized.contains("Serialize with image"));
121 assert!(serialized.contains("image"));
122
123 let deserialized: Task = serde_json::from_str(&serialized).unwrap();
124 assert_eq!(deserialized.prompt, task.prompt);
125 assert_eq!(deserialized.image, task.image);
126 assert_eq!(deserialized.submission_id, task.submission_id);
127 }
128}