use todomd::core::model::Category;
use todomd::core::ops;
use todomd::core::store::Store;
use todomd::persist::atomic::FileStore;
use todomd::persist::trueno_store::TruenoStore;
use todomd::persist::dual_store::DualStore;
use tempfile::tempdir;
#[test]
fn test_dual_store_integration() {
let dir = tempdir().unwrap();
let md_path = dir.path().join("todo.md");
let db_path = dir.path().join("todo.parquet");
let file_store = FileStore::new(md_path.clone());
let trueno_store = TruenoStore::new(db_path.clone());
let dual_store = DualStore::new(file_store, trueno_store);
let id = ops::add_todo(&dual_store, Category::Short, "Integration Task".to_string(), Some("Integration notes".to_string())).unwrap();
assert!(md_path.exists());
assert!(db_path.exists());
let state = dual_store.load().unwrap();
assert_eq!(state.short.len(), 1);
assert_eq!(state.short[0].title, "Integration Task");
assert_eq!(state.short[0].id, id);
ops::edit_todo(&dual_store, id, Some("Updated Title".to_string()), None).unwrap();
let state_updated = dual_store.load().unwrap();
assert_eq!(state_updated.short[0].title, "Updated Title");
let md_content = std::fs::read_to_string(&md_path).unwrap();
assert!(md_content.contains("Updated Title"));
}
#[test]
fn test_recovery_from_parquet() {
let dir = tempdir().unwrap();
let md_path = dir.path().join("todo.md");
let db_path = dir.path().join("todo.parquet");
let file_store = FileStore::new(md_path.clone());
let trueno_store = TruenoStore::new(db_path.clone());
let dual_store = DualStore::new(file_store, trueno_store);
ops::add_todo(&dual_store, Category::Short, "Backup Task".to_string(), None).unwrap();
std::fs::remove_file(&md_path).unwrap();
assert!(!md_path.exists());
let recovered = dual_store.load().unwrap();
assert_eq!(recovered.short.len(), 1);
assert_eq!(recovered.short[0].title, "Backup Task");
}