use super::*;
#[test]
fn compile_rejects_moved_dirs_defaults_that_alias_every_pattern() {
let p = policy("version: 1\ndefaults: ask\n");
for bad in ["", " ", "/", "relative/path"] {
let bad_ctx = EvalContext {
moved_dirs: vec![(bad.to_owned(), "/x".to_owned())],
..ctx()
};
let err = CompiledPolicy::compile(&p, &bad_ctx)
.expect_err(&format!("empty-ish `{bad}` must fail compile"));
assert!(
matches!(&err, PolicyError::Rule { rule, .. } if rule == "context.moved_dirs"),
"wrong error: {err:?}"
);
}
let repeat = EvalContext {
moved_dirs: vec![
("~/.claude".into(), "/srv/claude".into()),
("~/.claude".into(), "/vol/srv/claude".into()),
],
..ctx()
};
assert!(CompiledPolicy::compile(&p, &repeat).is_ok());
let ok = EvalContext {
moved_dirs: vec![("~/.claude".into(), "/srv/claude".into())],
..ctx()
};
assert!(CompiledPolicy::compile(&p, &ok).is_ok());
}