use assert_cmd::Command;
use predicates::prelude::*;
use std::fs;
use tempfile::TempDir;
#[test]
fn plan_rejects_a_config_that_requires_a_newer_tool_version() {
let project = project_with_config(
r#"
required_version = "999.0.0"
[repository]
github = "computed-parameter/example"
branch = "main"
"#,
);
Command::cargo_bin("release-tool")
.unwrap()
.current_dir(project.path())
.arg("plan")
.assert()
.failure()
.stderr(predicate::str::contains(
"release.toml requires release-tool >= 999.0.0; current version is 0.3.0",
))
.stderr(predicate::str::contains(
"update the repository's release-tool dependency and Cargo.lock",
));
}
#[test]
fn an_older_minimum_version_remains_compatible() {
let config = release_tool::config::Config::parse(
r#"required_version = "0.0.1"
[repository]
github = "computed-parameter/example"
branch = "main"
"#,
)
.unwrap();
assert_eq!(config.required_version, "0.0.1");
}
#[test]
fn plan_rejects_unknown_config_fields() {
let project = project_with_config(
r#"
required_version = "0.1.0"
unexpected = true
[repository]
github = "computed-parameter/example"
branch = "main"
"#,
);
Command::cargo_bin("release-tool")
.unwrap()
.current_dir(project.path())
.arg("plan")
.assert()
.failure()
.stderr(predicate::str::contains("unknown field `unexpected`"));
}
fn project_with_config(config: &str) -> TempDir {
let project = tempfile::tempdir().unwrap();
fs::write(project.path().join("release.toml"), config).unwrap();
project
}