use super::fixtures::*;
use crate::prompt::Error;
use tempfile::TempDir;
#[test]
fn run_refuses_a_non_workspace_via_the_layout_guard() {
let tmp = TempDir::new().unwrap();
let err = run_with_stubs(tmp.path(), "hi", &unreachable_adapter(), &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::Layout(_)), "got {err:?}");
}
#[test]
fn run_surfaces_per_repo_providers_yaml_load_error() {
let repo = scaffold_repo("providers: {}\n", Some("body"));
let err =
run_with_stubs(repo.path(), "hi", &unreachable_adapter(), &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::Config(_)), "got {err:?}");
}
#[test]
fn run_surfaces_absent_providers_yaml_as_control_read() {
let repo = scaffold_repo(VALID_PER_REPO_PROVIDERS_YAML, Some("body"));
std::fs::remove_file(repo.path().join("providers.yaml")).unwrap();
let err =
run_with_stubs(repo.path(), "hi", &unreachable_adapter(), &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::ControlRead { .. }), "got {err:?}");
}
#[test]
fn run_surfaces_workflow_load_error() {
let repo = scaffold_repo_with_workflow(
VALID_PER_REPO_PROVIDERS_YAML,
"events: [not, a, map]\n",
Some("body"),
);
let adapter = StubAdapter::scripted([StubAdapter::reply_ok(&version_line())]);
let err = run_with_stubs(repo.path(), "hi", &adapter, &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::Config(_)), "got {err:?}");
}
#[test]
fn run_surfaces_absent_workflow_as_control_read() {
let repo = scaffold_repo(VALID_PER_REPO_PROVIDERS_YAML, Some("body"));
std::fs::remove_file(repo.path().join("workflow.yaml")).unwrap();
let adapter = StubAdapter::scripted([StubAdapter::reply_ok(&version_line())]);
let err = run_with_stubs(repo.path(), "hi", &adapter, &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::ControlRead { .. }), "got {err:?}");
}
#[test]
fn run_surfaces_missing_soul() {
let repo = scaffold_repo(VALID_PER_REPO_PROVIDERS_YAML, None);
let adapter = StubAdapter::scripted([StubAdapter::reply_ok(&version_line())]);
let err = run_with_stubs(repo.path(), "hi", &adapter, &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::ControlRead { .. }), "got {err:?}");
}
#[test]
fn run_declines_a_config_schema_version_this_build_cannot_read() {
let repo = scaffold_repo(VALID_PER_REPO_PROVIDERS_YAML, Some("body"));
let newer = format!("{}\n", crate::config::version::SUPPORTED + 1);
std::fs::write(repo.path().join("version"), newer).unwrap();
let err =
run_with_stubs(repo.path(), "hi", &unreachable_adapter(), &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::Config(_)), "got {err:?}");
}
#[test]
fn run_surfaces_absent_version_as_control_read() {
let repo = scaffold_repo(VALID_PER_REPO_PROVIDERS_YAML, Some("body"));
std::fs::remove_file(repo.path().join("version")).unwrap();
let err =
run_with_stubs(repo.path(), "hi", &unreachable_adapter(), &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::ControlRead { .. }), "got {err:?}");
}
#[test]
fn run_declines_a_workflow_dispatching_an_undeclared_role() {
let repo = scaffold_repo_with_workflow(
VALID_PER_REPO_PROVIDERS_YAML,
"events:\n worker_return:\n - dispatch(verifier)\n",
Some("body"),
);
let adapter = StubAdapter::scripted([StubAdapter::reply_ok(&version_line())]);
let err = run_with_stubs(repo.path(), "hi", &adapter, &StubGit::ok()).unwrap_err();
assert!(matches!(err, Error::Config(_)), "got {err:?}");
}