46 lines
2.5 KiB
Rust
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());
|
|
}
|