use serde::{Deserialize, Serialize};
use super::common::{Gid, ResourceRef, UserRef};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ProjectTemplate {
pub gid: Gid,
pub name: String,
pub description: Option<String>,
pub html_description: Option<String>,
pub owner: Option<UserRef>,
pub team: Option<ResourceRef>,
#[serde(default)]
pub public: bool,
#[serde(default)]
pub requested_dates: Vec<RequestedDate>,
#[serde(default)]
pub requested_roles: Vec<RequestedRole>,
pub color: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RequestedDate {
pub gid: Gid,
pub name: Option<String>,
pub description: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RequestedRole {
pub gid: Gid,
pub name: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_deserialize_project_template() {
let json = r#"{
"gid": "123",
"name": "Sprint Template",
"description": "Template for sprint planning",
"public": true,
"requested_dates": [
{"gid": "date1", "name": "Sprint Start", "description": "When the sprint begins"}
],
"requested_roles": [
{"gid": "role1", "name": "Sprint Lead"}
]
}"#;
let template: ProjectTemplate = serde_json::from_str(json).unwrap();
assert_eq!(template.gid, "123");
assert_eq!(template.name, "Sprint Template");
assert!(template.public);
assert_eq!(template.requested_dates.len(), 1);
assert_eq!(template.requested_roles.len(), 1);
}
#[test]
fn test_deserialize_project_template_minimal() {
let json = r#"{
"gid": "456",
"name": "Basic Template"
}"#;
let template: ProjectTemplate = serde_json::from_str(json).unwrap();
assert_eq!(template.gid, "456");
assert_eq!(template.name, "Basic Template");
assert!(template.requested_dates.is_empty());
assert!(template.requested_roles.is_empty());
}
#[test]
fn test_deserialize_requested_date() {
let json = r#"{
"gid": "date123",
"name": "Project Deadline",
"description": "When the project must be completed"
}"#;
let date: RequestedDate = serde_json::from_str(json).unwrap();
assert_eq!(date.gid, "date123");
assert_eq!(date.name, Some("Project Deadline".to_string()));
}
}