From 3554adf7e42cc62043e009759dd860568ca68f8c Mon Sep 17 00:00:00 2001 From: 44r0n7 <44r0n7+gitea@pm.me> Date: Tue, 30 Dec 2025 13:50:13 -0500 Subject: [PATCH] Test new CLI flags and behaviors --- tests/integration.rs | 115 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/tests/integration.rs b/tests/integration.rs index 272e86e..9fe6229 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -4,6 +4,7 @@ use std::path::Path; use assert_cmd::Command; use httpmock::Method::{GET, POST}; use httpmock::MockServer; +use predicates::prelude::PredicateBooleanExt; use predicates::str::contains; use tempfile::TempDir; @@ -296,3 +297,117 @@ fn rename_in_place_uses_input_as_output() { assert!(renamed.exists()); assert!(!input.join("Alien.1979.1080p.mkv").exists()); } + +#[test] +fn completions_generate_output() { + let mut cmd = Command::new(assert_cmd::cargo_bin!("mov-renamarr")); + cmd.arg("--completions").arg("bash"); + + cmd.assert().success().stdout(contains("mov-renamarr")); +} + +#[test] +fn print_config_outputs_toml() { + let temp = TempDir::new().unwrap(); + let input = temp.path().join("input"); + let output = temp.path().join("output"); + fs::create_dir_all(&input).unwrap(); + fs::create_dir_all(&output).unwrap(); + + let mut cmd = Command::new(assert_cmd::cargo_bin!("mov-renamarr")); + cmd.arg("--input").arg(&input) + .arg("--output").arg(&output) + .arg("--print-config") + .env("XDG_CONFIG_HOME", temp.path().join("config")) + .env("XDG_CACHE_HOME", temp.path().join("cache")); + + cmd.assert() + .success() + .stdout(contains("provider = \"auto\"")) + .stdout(contains("cache_ttl_days")); +} + +#[test] +fn dry_run_summary_suppresses_per_file_output() { + let temp = TempDir::new().unwrap(); + let input = temp.path().join("input"); + let output = temp.path().join("output"); + fs::create_dir_all(&input).unwrap(); + fs::create_dir_all(&output).unwrap(); + fs::write(input.join("Film.2020.mkv"), b"stub").unwrap(); + + let ffprobe = make_ffprobe_stub(temp.path()); + + let mut cmd = Command::new(assert_cmd::cargo_bin!("mov-renamarr")); + cmd.arg("--input").arg(&input) + .arg("--output").arg(&output) + .arg("--dry-run") + .arg("--dry-run-summary") + .arg("--no-lookup") + .arg("--color").arg("never") + .env("XDG_CONFIG_HOME", temp.path().join("config")) + .env("XDG_CACHE_HOME", temp.path().join("cache")) + .env("PATH", prepend_path(ffprobe.parent().unwrap())); + + cmd.assert() + .success() + .stdout(contains("Processed: 1")) + .stdout(predicates::str::contains("[1/1]").not()); +} + +#[test] +fn explain_prints_candidates_on_skip() { + let server = MockServer::start(); + + let search_mock = server.mock(|when, then| { + when.method(GET) + .path("/search/movie") + .query_param("api_key", "test") + .query_param("query", "Zootopia") + .query_param("year", "2016"); + then.status(200) + .header("content-type", "application/json") + .body(r#"{"results":[{"id":55,"title":"Totally Different","release_date":"1990-01-01"}]}"#); + }); + + let details_mock = server.mock(|when, then| { + when.method(GET) + .path("/movie/55") + .query_param("api_key", "test"); + then.status(200) + .header("content-type", "application/json") + .body(r#"{"id":55,"title":"Totally Different","release_date":"1990-01-01","runtime":120,"imdb_id":"tt055"}"#); + }); + + let temp = TempDir::new().unwrap(); + let input = temp.path().join("input"); + let output = temp.path().join("output"); + fs::create_dir_all(&input).unwrap(); + fs::create_dir_all(&output).unwrap(); + fs::write(input.join("Zootopia.2016.mkv"), b"stub").unwrap(); + + let ffprobe = make_ffprobe_stub(temp.path()); + + let mut cmd = Command::new(assert_cmd::cargo_bin!("mov-renamarr")); + cmd.arg("--input").arg(&input) + .arg("--output").arg(&output) + .arg("--dry-run") + .arg("--provider").arg("tmdb") + .arg("--min-score").arg("99") + .arg("--explain") + .arg("--color").arg("never") + .env("MOV_RENAMARR_TMDB_API_KEY", "test") + .env("MOV_RENAMARR_TMDB_BASE_URL", server.url("")) + .env("XDG_CONFIG_HOME", temp.path().join("config")) + .env("XDG_CACHE_HOME", temp.path().join("cache")) + .env("PATH", prepend_path(ffprobe.parent().unwrap())); + + cmd.assert() + .success() + .stdout(contains("skipped")) + .stdout(contains("Candidates:")) + .stdout(contains("Totally Different")); + + search_mock.assert_hits(1); + details_mock.assert_hits(1); +}