use choreo_daemon::{WriteFileArgs, execute_write_file_tool};
use std::path::Path;
fn write_args(path: &Path, content: &str, overwrite: bool) -> WriteFileArgs {
WriteFileArgs {
path: path.to_str().unwrap().into(),
content: content.into(),
overwrite: Some(overwrite),
create_parents: Some(true),
}
}
#[cfg(unix)]
#[test]
#[ignore]
fn overwrite_preserves_execute_permissions() {
use std::os::unix::fs::PermissionsExt;
let dir = tempfile::tempdir().unwrap();
let script = dir.path().join("deploy.sh");
std::fs::write(&script, "#!/usr/bin/env bash\necho deploy\n").unwrap();
std::fs::set_permissions(&script, std::fs::Permissions::from_mode(0o755)).unwrap();
execute_write_file_tool(
&write_args(&script, "#!/usr/bin/env bash\necho updated\n", true),
None,
)
.unwrap();
let content = std::fs::read_to_string(&script).unwrap();
assert!(
content.contains("echo updated"),
"content must be overwritten: {content}"
);
let mode = std::fs::metadata(&script).unwrap().permissions().mode() & 0o777;
assert_eq!(mode, 0o755, "overwrite must preserve the executable bit");
}
#[cfg(unix)]
#[test]
#[ignore]
fn overwrite_new_file_keeps_tempfile_default_mode() {
use std::os::unix::fs::PermissionsExt;
let dir = tempfile::tempdir().unwrap();
let fresh = dir.path().join("fresh.txt");
execute_write_file_tool(&write_args(&fresh, "hello\n", true), None).unwrap();
let mode = std::fs::metadata(&fresh).unwrap().permissions().mode() & 0o777;
assert_eq!(mode, 0o600, "new files keep the 0600 tempfile default");
}