Skip to main content

autoagents_core/agent/
task.rs

1#[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}