use serde::{Deserialize, Serialize};
use crate::models::notebook::Notebook;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ListRecentlyViewedResponse {
#[serde(default)]
pub notebooks: Vec<Notebook>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn list_recently_viewed_response_deserializes_correctly() {
let json = r#"{
"notebooks": [
{"title": "Notebook 1", "name": "notebooks/123"},
{"title": "Notebook 2", "name": "notebooks/456"}
]
}"#;
let response: ListRecentlyViewedResponse = serde_json::from_str(json).unwrap();
assert_eq!(response.notebooks.len(), 2);
assert_eq!(response.notebooks[0].title, "Notebook 1");
assert_eq!(response.notebooks[1].title, "Notebook 2");
}
#[test]
fn list_recently_viewed_response_deserializes_empty() {
let json = r#"{}"#;
let response: ListRecentlyViewedResponse = serde_json::from_str(json).unwrap();
assert_eq!(response.notebooks.len(), 0);
}
#[test]
fn list_recently_viewed_response_serializes_correctly() {
let response = ListRecentlyViewedResponse {
notebooks: vec![Notebook {
name: Some("notebooks/123".to_string()),
title: "Test Notebook".to_string(),
..Default::default()
}],
};
let json = serde_json::to_string(&response).unwrap();
assert!(json.contains("notebooks"));
assert!(json.contains("Test Notebook"));
}
}