use super::atomic_push;
use crate::command_options::{OptionError, OptionErrorKind};
use crate::command_test_support::os_arguments;
use crate::rule_argument_rewrite::ArgumentRewrite;
fn decide(values: &[&str]) -> Result<ArgumentRewrite, OptionError> {
return atomic_push(os_arguments(values).as_slice(), &[]);
}
fn rewritten(values: &[&str]) -> Result<ArgumentRewrite, OptionError> {
return Ok(ArgumentRewrite::Rewritten(os_arguments(values)));
}
#[test]
fn passes_non_push_commands_through_unchanged() {
for values in [
vec!["status", "--short"],
vec![],
vec!["--version", "push"],
vec!["-C", "push", "status"],
vec!["--bogus", "push"],
vec!["-c"],
] {
assert_eq!(
decide(values.as_slice()),
Ok(ArgumentRewrite::Unchanged),
"{values:?}"
);
}
}
#[test]
fn injects_atomic_immediately_after_push() {
assert_eq!(
decide(&["push", "origin", "main"]),
rewritten(&["push", "--atomic", "origin", "main"])
);
assert_eq!(
decide(&["-C", "/tmp/repo", "push", "origin", "main"]),
rewritten(&["-C", "/tmp/repo", "push", "--atomic", "origin", "main"])
);
assert_eq!(decide(&["push"]), rewritten(&["push", "--atomic"]));
}
#[test]
fn skips_injection_when_the_caller_chose() {
for values in [
vec!["push", "--atomic", "origin", "main"],
vec!["push", "--no-atomic", "origin", "main"],
vec!["push", "origin", "--at"],
vec!["push", "--no-at", "origin"],
] {
assert_eq!(
decide(values.as_slice()),
Ok(ArgumentRewrite::Unchanged),
"{values:?}"
);
}
}
#[test]
fn injects_when_atomic_is_only_a_value_or_a_refspec() {
assert_eq!(
decide(&["push", "-o", "--atomic", "origin"]),
rewritten(&["push", "--atomic", "-o", "--atomic", "origin"])
);
assert_eq!(
decide(&["push", "origin", "--", "--atomic"]),
rewritten(&["push", "--atomic", "origin", "--", "--atomic"])
);
}
#[test]
fn reports_refusals_and_tolerates_wrapper_flags() {
assert_eq!(
decide(&["push", "--unknown"]),
Err(OptionError {
kind: OptionErrorKind::UnknownOption,
token: 0
})
);
assert_eq!(
atomic_push(
os_arguments(&["push", "--cli-git-keep-going", "origin"]).as_slice(),
&[b"--cli-git-keep-going"]
),
rewritten(&["push", "--atomic", "--cli-git-keep-going", "origin"])
);
}