Test new CLI flags and behaviors
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user