From db0e7456abc6894ac78595b91aa6de999e612d6a Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Tue, 20 May 2025 15:20:05 -0400 Subject: [PATCH] Add unit tests for CLI run functions --- cli-bin/tests/cli_coll_unit.rs | 30 +++++++++++++++++++++++++++ cli-bin/tests/cli_link_unit.rs | 37 ++++++++++++++++++++++++++++++++++ cli-bin/tests/cli_view_unit.rs | 27 +++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 cli-bin/tests/cli_coll_unit.rs create mode 100644 cli-bin/tests/cli_link_unit.rs create mode 100644 cli-bin/tests/cli_view_unit.rs diff --git a/cli-bin/tests/cli_coll_unit.rs b/cli-bin/tests/cli_coll_unit.rs new file mode 100644 index 0000000..e287680 --- /dev/null +++ b/cli-bin/tests/cli_coll_unit.rs @@ -0,0 +1,30 @@ +mod cli { + #[derive(Clone, Copy, Debug)] + pub enum Format { Text, Json } +} + +#[path = "../src/cli/coll.rs"] +mod coll; + +use libmarlin::db; + +#[test] +fn coll_run_creates_and_adds() { + let mut conn = db::open(":memory:").unwrap(); + conn.execute("INSERT INTO files(path,size,mtime) VALUES ('a.txt',0,0)", []).unwrap(); + conn.execute("INSERT INTO files(path,size,mtime) VALUES ('b.txt',0,0)", []).unwrap(); + + let create = coll::CollCmd::Create(coll::CreateArgs{ name: "Set".into() }); + coll::run(&create, &mut conn, cli::Format::Text).unwrap(); + + let coll_id: i64 = conn.query_row("SELECT id FROM collections WHERE name='Set'", [], |r| r.get(0)).unwrap(); + + let add = coll::CollCmd::Add(coll::AddArgs{ name: "Set".into(), file_pattern: "*.txt".into() }); + coll::run(&add, &mut conn, cli::Format::Text).unwrap(); + + let cnt: i64 = conn.query_row("SELECT COUNT(*) FROM collection_files WHERE collection_id=?1", [coll_id], |r| r.get(0)).unwrap(); + assert_eq!(cnt, 2); + + let list = coll::CollCmd::List(coll::ListArgs{ name: "Set".into() }); + coll::run(&list, &mut conn, cli::Format::Text).unwrap(); +} diff --git a/cli-bin/tests/cli_link_unit.rs b/cli-bin/tests/cli_link_unit.rs new file mode 100644 index 0000000..5922bcd --- /dev/null +++ b/cli-bin/tests/cli_link_unit.rs @@ -0,0 +1,37 @@ +mod cli { + #[derive(Clone, Copy, Debug)] + pub enum Format { Text, Json } +} + +#[path = "../src/cli/link.rs"] +mod link; + +use libmarlin::db; + +#[test] +fn link_run_add_and_rm() { + let mut conn = db::open(":memory:").unwrap(); + conn.execute("INSERT INTO files(path,size,mtime) VALUES ('foo.txt',0,0)", []).unwrap(); + conn.execute("INSERT INTO files(path,size,mtime) VALUES ('bar.txt',0,0)", []).unwrap(); + + let add = link::LinkCmd::Add(link::LinkArgs { + from: "foo.txt".into(), + to: "bar.txt".into(), + r#type: None, + }); + link::run(&add, &mut conn, cli::Format::Text).unwrap(); + let count: i64 = conn.query_row("SELECT COUNT(*) FROM links", [], |r| r.get(0)).unwrap(); + assert_eq!(count, 1); + + let list = link::LinkCmd::List(link::ListArgs { pattern: "foo.txt".into(), direction: None, r#type: None }); + link::run(&list, &mut conn, cli::Format::Text).unwrap(); + + let rm = link::LinkCmd::Rm(link::LinkArgs { + from: "foo.txt".into(), + to: "bar.txt".into(), + r#type: None, + }); + link::run(&rm, &mut conn, cli::Format::Text).unwrap(); + let remaining: i64 = conn.query_row("SELECT COUNT(*) FROM links", [], |r| r.get(0)).unwrap(); + assert_eq!(remaining, 0); +} diff --git a/cli-bin/tests/cli_view_unit.rs b/cli-bin/tests/cli_view_unit.rs new file mode 100644 index 0000000..c2f0338 --- /dev/null +++ b/cli-bin/tests/cli_view_unit.rs @@ -0,0 +1,27 @@ +mod cli { + #[derive(Clone, Copy, Debug)] + pub enum Format { Text, Json } +} + +#[path = "../src/cli/view.rs"] +mod view; + +use libmarlin::db; + +#[test] +fn view_run_save_and_exec() { + let mut conn = db::open(":memory:").unwrap(); + conn.execute("INSERT INTO files(path,size,mtime) VALUES ('TODO.txt',0,0)", []).unwrap(); + + let save = view::ViewCmd::Save(view::ArgsSave { view_name: "tasks".into(), query: "TODO".into() }); + view::run(&save, &mut conn, cli::Format::Text).unwrap(); + + let stored: String = conn.query_row("SELECT query FROM views WHERE name='tasks'", [], |r| r.get(0)).unwrap(); + assert_eq!(stored, "TODO"); + + let list = view::ViewCmd::List; + view::run(&list, &mut conn, cli::Format::Text).unwrap(); + + let exec = view::ViewCmd::Exec(view::ArgsExec { view_name: "tasks".into() }); + view::run(&exec, &mut conn, cli::Format::Text).unwrap(); +}