Files
Marcos Paulo d1cedc99d2
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
ci / ci (macos-latest) (push) Has been cancelled
fix(engine): note.delete/rename/duplicate work on drawings, canvases and attachments; feat(mac): no title bar, traffic lights float over the canvas
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 17:30:45 -03:00

46 lines
2.5 KiB
Rust

//! Raw UTF-8 file buffers retain vault safety and attachment indexing.
mod common;
use common::{seed, temp_vault};
use notescraft_engine::Session;
#[test]
fn raw_files_share_atomic_save_and_dirty_buffers() {
let vault = temp_vault("raw_files");
seed(vault.path(), &[("board.canvas", "{\"nodes\":[]}"), ("a.mmd", "flowchart LR\nA-->B")]);
let mut session = Session::open(vault.path()).expect("session");
assert_eq!(session.read_file("board.canvas").expect("raw"), "{\"nodes\":[]}");
session.open_file_buffer("board.canvas").expect("buffer");
session.buffer_mut("board.canvas").expect("buffer").edit(0..0, " ").expect("edit");
assert!(session.save_buffer("board.canvas").expect("save"));
assert!(!session.buffer("board.canvas").expect("buffer").is_dirty());
assert!(session.index().note("board.canvas").is_none());
assert!(session.index().files().contains(&"board.canvas"));
assert!(session.write_file("../escape.canvas", "x").is_err());
for path in [".obsidian/x.canvas", ".notescraft/x.canvas"] {
assert!(session.write_file(path, "x").is_err());
}
assert!(session.write_file("new.excalidraw", "{}").expect("write"));
assert!(session.index().files().contains(&"new.excalidraw"));
let mut readonly = Session::open_read_only(vault.path()).expect("readonly");
assert!(readonly.write_file("board.canvas", "{}").is_err());
}
#[test]
fn non_markdown_files_can_be_renamed_duplicated_and_deleted() {
let vault = temp_vault("raw_file_ops");
seed(vault.path(), &[("Untitled.excalidraw", "{}"), ("note.md", "![[Untitled.excalidraw]]")]);
let mut session = Session::open(vault.path()).expect("session");
let copy = session.duplicate_note("Untitled.excalidraw").expect("duplicate");
assert_eq!(copy, "Untitled copy.excalidraw");
assert!(session.index().files().contains(&"Untitled copy.excalidraw"));
session.rename_note("Untitled copy.excalidraw", "Board.excalidraw", true).expect("rename");
assert!(session.index().files().contains(&"Board.excalidraw"));
assert!(!session.index().files().contains(&"Untitled copy.excalidraw"));
assert!(session.rename_note("Board.excalidraw", "Board.md", true).is_err(), "a drawing cannot become a note");
session.delete_note("Board.excalidraw").expect("delete");
session.delete_note("Untitled.excalidraw").expect("delete");
assert_eq!(session.index().files().len(), 0);
assert!(session.delete_note("../x.canvas").is_err());
assert!(session.delete_note(".obsidian/x.canvas").is_err());
}