use serde::{Deserialize, Serialize};
use crate::storage::TaskKind;
#[derive(Debug, Deserialize, Default)]
pub struct ListTasksQuery {
#[serde(default)]
pub project_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, utoipa::ToSchema)]
pub struct CreateTaskRequest {
pub name: String,
pub kind: TaskKind,
pub body: String,
#[serde(default)]
pub project_id: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_create_request_deserialize_minimum() {
let req: CreateTaskRequest =
serde_json::from_str(r#"{"name":"build","kind":"bash","body":"cargo build"}"#).unwrap();
assert_eq!(req.name, "build");
assert_eq!(req.kind, TaskKind::Bash);
assert_eq!(req.body, "cargo build");
assert!(req.project_id.is_none());
}
#[test]
fn test_create_request_deserialize_full() {
let req: CreateTaskRequest = serde_json::from_str(
r#"{"name":"build","kind":"bash","body":"cargo build","project_id":"proj-1"}"#,
)
.unwrap();
assert_eq!(req.name, "build");
assert_eq!(req.kind, TaskKind::Bash);
assert_eq!(req.body, "cargo build");
assert_eq!(req.project_id.as_deref(), Some("proj-1"));
}
#[test]
fn test_list_query_default_is_empty() {
let q = ListTasksQuery::default();
assert!(q.project_id.is_none());
}
}