Test new CLI flags and behaviors

This commit is contained in:
2025-12-30 13:50:13 -05:00
parent 1f61efff5c
commit 3554adf7e4

View File

@@ -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);
}