chore: add CLI tests for copy/move/delete operations and a print_session helper function

This commit is contained in:
wfx 2026-03-07 22:31:42 +01:00
parent 82f2f9d80e
commit 1ab1e2228e

View file

@ -8,6 +8,43 @@ use noctua_core::document::manager::{DocumentCommand, DocumentManager, DocumentS
use noctua_core::document::session::SessionKind;
use std::path::PathBuf;
fn print_session(manager: &DocumentManager, session_name: &str) {
if let Some(session) = manager.session(session_name) {
println!("Session '{}' ({:?})", session.name, session.kind);
println!(
" Items: {}, current_index: {:?}",
session.items.len(),
session.current_index
);
for (i, item) in session.items.iter().enumerate() {
let marker = if session.current_index == Some(i) {
"*"
} else {
" "
};
println!(
" [{}] {} (page {})",
marker,
item.path.display(),
item.page_index
);
}
} else {
println!("Session '{}' not found", session_name);
}
}
fn handle_command(manager: &mut DocumentManager, command: DocumentCommand) {
manager.handle(command);
match &manager.state {
DocumentState::Error(err) => {
eprintln!("Error: {}", err);
manager.state = DocumentState::Empty;
}
_ => {}
}
}
#[derive(Parser, Debug)]
#[command(
name = "noctua",
@ -118,7 +155,7 @@ fn main() {
}
println!("\nUI: Test navigation...");
manager.handle(DocumentCommand::NavigateNext);
handle_command(&mut manager, DocumentCommand::NavigateNext);
if let Some(session) = manager.session(&name) {
println!(
"UI: After NavigateNext -> index {:?}",
@ -126,7 +163,7 @@ fn main() {
);
}
manager.handle(DocumentCommand::NavigatePrevious);
handle_command(&mut manager, DocumentCommand::NavigatePrevious);
if let Some(session) = manager.session(&name) {
println!(
"UI: After NavigatePrevious -> index {:?}",
@ -134,13 +171,82 @@ fn main() {
);
}
manager.handle(DocumentCommand::SelectItem(0));
handle_command(&mut manager, DocumentCommand::SelectItem(0));
if let Some(session) = manager.session(&name) {
println!(
"UI: After SelectItem(0) -> index {:?}",
session.current_index
);
}
println!("\nUI: Test copy/move/delete...");
handle_command(
&mut manager,
DocumentCommand::CreateSession {
name: "Favorites".to_string(),
kind: SessionKind::DocumentCollection,
path: None,
},
);
handle_command(
&mut manager,
DocumentCommand::CreateSession {
name: "Workspace".to_string(),
kind: SessionKind::DocumentCollection,
path: None,
},
);
println!("\nBefore CopyItemToSession:");
print_session(&manager, "Favorites");
handle_command(
&mut manager,
DocumentCommand::CopyItemToSession {
source_session: name.clone(),
target_session: "Favorites".to_string(),
source_item_index: 0,
target_item_index: None,
},
);
println!("\nAfter CopyItemToSession to Favorites:");
print_session(&manager, "Favorites");
println!("\n--- Test DeleteItemFromSession on DirectoryBrowser (should fail) ---");
handle_command(
&mut manager,
DocumentCommand::DeleteItemFromSession {
session: name.clone(),
item_index: None,
},
);
println!("\n--- Test Move from Favorites to Workspace ---");
println!("\nBefore Move:");
print_session(&manager, "Favorites");
print_session(&manager, "Workspace");
handle_command(
&mut manager,
DocumentCommand::CopyItemToSession {
source_session: "Favorites".to_string(),
target_session: "Workspace".to_string(),
source_item_index: 0,
target_item_index: None,
},
);
handle_command(
&mut manager,
DocumentCommand::DeleteItemFromSession {
session: "Favorites".to_string(),
item_index: Some(0),
},
);
println!("\nAfter Move:");
print_session(&manager, "Favorites");
print_session(&manager, "Workspace");
}
}
}