use crate::commands;
use crate::store::DataStore;
mod crud;
mod format;
mod init;
mod selectors;
mod status;
mod tags;
mod transfer;
mod util;
#[cfg(test)]
pub(crate) mod test_support;
pub struct PadzApi<S: DataStore> {
store: S,
paths: commands::PadzPaths,
}
impl<S: DataStore> PadzApi<S> {
pub fn new(store: S, paths: commands::PadzPaths) -> Self {
Self { store, paths }
}
pub fn paths(&self) -> &commands::PadzPaths {
&self.paths
}
}
pub use crate::model::TodoStatus;
pub use commands::get::{PadFilter, PadStatusFilter};
pub use commands::{CmdMessage, CmdResult, MessageLevel, PadUpdate, PadzPaths};
#[cfg(test)]
mod tests {
use super::test_support::make_api;
use super::PadFilter;
use crate::model::Scope;
use crate::store::backend::StorageBackend;
#[test]
fn test_editor_flow_preserves_nested_parent() {
let mut api = make_api();
api.create_pad(Scope::Project, "Parent".into(), "".into(), None)
.unwrap();
let result = api
.create_pad(Scope::Project, "".into(), "".into(), Some("1"))
.unwrap();
let child_id = result.affected_pads[0].pad.metadata.id;
assert!(result.affected_pads[0].pad.metadata.parent_id.is_some());
api.store
.active_store_mut()
.backend
.write_content(&child_id, Scope::Project, "Editor Content")
.unwrap();
let refreshed = api.refresh_pad(Scope::Project, &child_id).unwrap();
assert!(refreshed.is_some(), "Pad should exist after refresh");
let pad = refreshed.unwrap();
assert_eq!(pad.metadata.title, "Editor Content");
assert!(
pad.metadata.parent_id.is_some(),
"Parent ID must be preserved through editor flow"
);
api.propagate_status(Scope::Project, pad.metadata.parent_id)
.unwrap();
let all = api
.get_pads(Scope::Project, PadFilter::default(), &[] as &[String])
.unwrap();
assert_eq!(all.listed_pads.len(), 1, "Should have one root pad");
let parent_dp = &all.listed_pads[0];
assert_eq!(parent_dp.pad.metadata.title, "Parent");
assert_eq!(parent_dp.children.len(), 1, "Parent should have one child");
let child_dp = &parent_dp.children[0];
assert_eq!(child_dp.pad.metadata.id, child_id);
assert_eq!(
child_dp.pad.metadata.parent_id, pad.metadata.parent_id,
"Parent ID must survive the full create→editor→refresh→propagate cycle"
);
}
}