extern crate libzettels;
extern crate tempfile;
use self::tempfile::tempdir;
use libzettels::{Config, Index, IndexingMethod};
use libzettels::examples::*;
use std::path::PathBuf;
#[test]
fn test_full_run_from_scratch_grep() {
let tmp_dir = tempdir().expect("Failed to setup temp dir");
let dir = tmp_dir.path();
generate_bare_examples(dir).expect("Failed to generate examples");
let rootdir = dir.join("examples/Zettelkasten");
let config_dir = dir.join("examples/config");
let indexfile = config_dir.join("index.yaml"); let cfg_file = config_dir.join("libzettels.cfg.yaml");
let mut cfg = Config::new(&rootdir, &indexfile);
cfg.indexingmethod = IndexingMethod::Grep;
cfg.to_file(&cfg_file).expect("Failed to write config");
let index = Index::new(&cfg).expect("Failed to create index");
index.save(&cfg).expect("Failed to save index");
assert_eq!(index.files.len(), 7);
assert!(index.files.contains_key(&PathBuf::from("file1.md")));
assert!(index.files.contains_key(&PathBuf::from("file2.md")));
assert!(index.files.contains_key(&PathBuf::from("file3.md")));
assert!(index.files.contains_key(&PathBuf::from("subdir/file4.md")));
assert!(index.files.contains_key(&PathBuf::from("subdir/file5.md")));
assert!(index.files.contains_key(&PathBuf::from("onlies/markdown-only.md")));
assert!(index.files.contains_key(&PathBuf::from("onlies/pure-yaml.yaml")));
let z = index.get_zettel("file1.md").unwrap();
assert_eq!(z.title, "File 1");
assert_eq!(z.links.len(), 2);
assert!(z.links.contains(&PathBuf::from("file2.md")));
assert!(z.links.contains(&PathBuf::from("file3.md")));
assert_eq!(z.followups.len(), 2);
assert!(z.followups.contains(&PathBuf::from("file2.md")));
assert!(z.followups.contains(&PathBuf::from("file3.md")));
assert_eq!(z.keywords.len(), 3);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"first".to_string()));
assert!(z.keywords.contains(&"test".to_string()));
let z = index.get_zettel("file2.md").unwrap();
assert_eq!(z.title, "File 2");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file3.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"second".to_string()));
let z = index.get_zettel("file3.md").unwrap();
assert_eq!(z.title, "File 3");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"third".to_string()));
let z = index.get_zettel("onlies/markdown-only.md").unwrap();
assert_eq!(z.title, "untitled");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file2.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 0);
let z = index.get_zettel("onlies/pure-yaml.yaml").unwrap();
assert_eq!(z.title, "Pure Yaml");
assert_eq!(z.links.len(), 0);
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"pureyaml".to_string()));
let z = index.get_zettel("subdir/file4.md").unwrap();
assert_eq!(z.title, "File 4");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 2);
assert!(z.followups.contains(&PathBuf::from("file1.md")));
assert!(z.followups.contains(&PathBuf::from("subdir/file5.md")));
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"fourth".to_string()));
let z = index.get_zettel("subdir/file5.md").unwrap();
assert_eq!(z.title, "File 5");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 0);
}
#[test]
fn test_full_run_from_scratch_ripgrep() {
let tmp_dir = tempdir().expect("Failed to setup temp dir");
let dir = tmp_dir.path();
generate_bare_examples(dir).expect("Failed to generate examples");
let rootdir = dir.join("examples/Zettelkasten");
let config_dir = dir.join("examples/config");
let indexfile = config_dir.join("index.yaml"); let cfg_file = config_dir.join("libzettels.cfg.yaml");
let mut cfg = Config::new(&rootdir, &indexfile);
cfg.indexingmethod = IndexingMethod::RipGrep;
cfg.to_file(&cfg_file).expect("Failed to write config");
let index = Index::new(&cfg).expect("Failed to create index");
index.save(&cfg).expect("Failed to save index");
assert_eq!(index.files.len(), 7);
assert!(index.files.contains_key(&PathBuf::from("file1.md")));
assert!(index.files.contains_key(&PathBuf::from("file2.md")));
assert!(index.files.contains_key(&PathBuf::from("file3.md")));
assert!(index.files.contains_key(&PathBuf::from("subdir/file4.md")));
assert!(index.files.contains_key(&PathBuf::from("subdir/file5.md")));
assert!(index.files.contains_key(&PathBuf::from("onlies/markdown-only.md")));
assert!(index.files.contains_key(&PathBuf::from("onlies/pure-yaml.yaml")));
let z = index.get_zettel("file1.md").unwrap();
assert_eq!(z.title, "File 1");
assert_eq!(z.links.len(), 2);
assert!(z.links.contains(&PathBuf::from("file2.md")));
assert!(z.links.contains(&PathBuf::from("file3.md")));
assert_eq!(z.followups.len(), 2);
assert!(z.followups.contains(&PathBuf::from("file2.md")));
assert!(z.followups.contains(&PathBuf::from("file3.md")));
assert_eq!(z.keywords.len(), 3);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"first".to_string()));
assert!(z.keywords.contains(&"test".to_string()));
let z = index.get_zettel("file2.md").unwrap();
assert_eq!(z.title, "File 2");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file3.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"second".to_string()));
let z = index.get_zettel("file3.md").unwrap();
assert_eq!(z.title, "File 3");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"third".to_string()));
let z = index.get_zettel("onlies/markdown-only.md").unwrap();
assert_eq!(z.title, "untitled");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file2.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 0);
let z = index.get_zettel("onlies/pure-yaml.yaml").unwrap();
assert_eq!(z.title, "Pure Yaml");
assert_eq!(z.links.len(), 0);
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"pureyaml".to_string()));
let z = index.get_zettel("subdir/file4.md").unwrap();
assert_eq!(z.title, "File 4");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 2);
assert!(z.followups.contains(&PathBuf::from("file1.md")));
assert!(z.followups.contains(&PathBuf::from("subdir/file5.md")));
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"fourth".to_string()));
let z = index.get_zettel("subdir/file5.md").unwrap();
assert_eq!(z.title, "File 5");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 0);
}
#[test]
fn test_full_run_from_scratch_native() {
let tmp_dir = tempdir().expect("Failed to setup temp dir");
let dir = tmp_dir.path();
generate_bare_examples(dir).expect("Failed to generate examples");
let rootdir = dir.join("examples/Zettelkasten");
let config_dir = dir.join("examples/config");
let indexfile = config_dir.join("index.yaml"); let cfg_file = config_dir.join("libzettels.cfg.yaml");
let mut cfg = Config::new(&rootdir, &indexfile);
cfg.indexingmethod = IndexingMethod::Native;
cfg.to_file(&cfg_file).expect("Failed to write config");
let index = Index::new(&cfg).expect("Failed to create index");
index.save(&cfg).expect("Failed to save index");
assert_eq!(index.files.len(), 7);
assert!(index.files.contains_key(&PathBuf::from("file1.md")));
assert!(index.files.contains_key(&PathBuf::from("file2.md")));
assert!(index.files.contains_key(&PathBuf::from("file3.md")));
assert!(index.files.contains_key(&PathBuf::from("subdir/file4.md")));
assert!(index.files.contains_key(&PathBuf::from("subdir/file5.md")));
assert!(index.files.contains_key(&PathBuf::from("onlies/markdown-only.md")));
assert!(index.files.contains_key(&PathBuf::from("onlies/pure-yaml.yaml")));
let z = index.get_zettel("file1.md").unwrap();
assert_eq!(z.title, "File 1");
assert_eq!(z.links.len(), 2);
assert!(z.links.contains(&PathBuf::from("file2.md")));
assert!(z.links.contains(&PathBuf::from("file3.md")));
assert_eq!(z.followups.len(), 2);
assert!(z.followups.contains(&PathBuf::from("file2.md")));
assert!(z.followups.contains(&PathBuf::from("file3.md")));
assert_eq!(z.keywords.len(), 3);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"first".to_string()));
assert!(z.keywords.contains(&"test".to_string()));
let z = index.get_zettel("file2.md").unwrap();
assert_eq!(z.title, "File 2");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file3.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"second".to_string()));
let z = index.get_zettel("file3.md").unwrap();
assert_eq!(z.title, "File 3");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"third".to_string()));
let z = index.get_zettel("onlies/markdown-only.md").unwrap();
assert_eq!(z.title, "untitled");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file2.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 0);
let z = index.get_zettel("onlies/pure-yaml.yaml").unwrap();
assert_eq!(z.title, "Pure Yaml");
assert_eq!(z.links.len(), 0);
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"pureyaml".to_string()));
let z = index.get_zettel("subdir/file4.md").unwrap();
assert_eq!(z.title, "File 4");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 2);
assert!(z.followups.contains(&PathBuf::from("file1.md")));
assert!(z.followups.contains(&PathBuf::from("subdir/file5.md")));
assert_eq!(z.keywords.len(), 2);
assert!(z.keywords.contains(&"example".to_string()));
assert!(z.keywords.contains(&"fourth".to_string()));
let z = index.get_zettel("subdir/file5.md").unwrap();
assert_eq!(z.title, "File 5");
assert_eq!(z.links.len(), 1);
assert!(z.links.contains(&PathBuf::from("file1.md")));
assert_eq!(z.followups.len(), 0);
assert_eq!(z.keywords.len(), 0);
}