#![allow(unused_imports)]
use std::collections::HashMap;
use crate::gates::{GateTable, HostFacts};
use crate::handlers::HandlerConfig;
use crate::packs::Pack;
use crate::rules::{Rule, Scanner};
use crate::testing::TempEnvironment;
use super::{default_rules, host_pair, make_pack};
#[test]
fn mappings_gate_failing_drops_file() {
let env = TempEnvironment::builder()
.pack("p")
.file("install-mac.sh", "x")
.done()
.build();
let scanner = Scanner::new(env.fs.as_ref());
let pack = make_pack("p", env.dotfiles_root.join("p"));
let (gates, host) = host_pair("darwin", "aarch64");
let mut mappings_gates = HashMap::new();
mappings_gates.insert("install-mac.sh".to_string(), "linux".to_string());
let matches = scanner
.scan_pack(&pack, &default_rules(), &[], &gates, &host, &mappings_gates)
.unwrap();
assert_eq!(matches.len(), 1);
let m = &matches[0];
assert_eq!(m.handler, crate::handlers::HANDLER_GATE);
assert_eq!(m.options.get("gate_label"), Some(&"linux".to_string()));
}
#[test]
fn mappings_gate_passing_does_not_alter_dispatch() {
let env = TempEnvironment::builder()
.pack("p")
.file("config-mac.toml", "x")
.done()
.build();
let scanner = Scanner::new(env.fs.as_ref());
let pack = make_pack("p", env.dotfiles_root.join("p"));
let (gates, host) = host_pair("darwin", "aarch64");
let mut mappings_gates = HashMap::new();
mappings_gates.insert("config-mac.toml".to_string(), "darwin".to_string());
let matches = scanner
.scan_pack(&pack, &default_rules(), &[], &gates, &host, &mappings_gates)
.unwrap();
assert_eq!(matches.len(), 1);
let m = &matches[0];
assert_eq!(m.handler, "symlink");
assert_eq!(m.relative_path.to_string_lossy(), "config-mac.toml");
}
#[test]
fn mappings_gate_glob_matches_subpath() {
let env = TempEnvironment::builder()
.pack("p")
.file("setup/foo.sh", "x")
.done()
.build();
let scanner = Scanner::new(env.fs.as_ref());
let pack = make_pack("p", env.dotfiles_root.join("p"));
let (gates, host) = host_pair("darwin", "aarch64");
let mut mappings_gates = HashMap::new();
mappings_gates.insert("setup/*.sh".to_string(), "linux".to_string());
let matches = scanner
.scan_pack(&pack, &default_rules(), &[], &gates, &host, &mappings_gates)
.unwrap();
assert_eq!(matches.len(), 1);
assert_eq!(matches[0].handler, "symlink");
assert_eq!(matches[0].relative_path.to_string_lossy(), "setup");
}
#[test]
fn mappings_gate_conflict_with_basename_gate_errors() {
let env = TempEnvironment::builder()
.pack("p")
.file("install._darwin.sh", "x")
.done()
.build();
let scanner = Scanner::new(env.fs.as_ref());
let pack = make_pack("p", env.dotfiles_root.join("p"));
let (gates, host) = host_pair("darwin", "aarch64");
let mut mappings_gates = HashMap::new();
mappings_gates.insert("install._darwin.sh".to_string(), "linux".to_string());
let err = scanner
.scan_pack(&pack, &default_rules(), &[], &gates, &host, &mappings_gates)
.unwrap_err();
let msg = err.to_string();
assert!(msg.contains("gate-routing conflict"), "{msg}");
assert!(msg.contains("install._darwin.sh"), "{msg}");
}
#[test]
fn mappings_gate_unknown_label_errors() {
let env = TempEnvironment::builder()
.pack("p")
.file("foo.sh", "x")
.done()
.build();
let scanner = Scanner::new(env.fs.as_ref());
let pack = make_pack("p", env.dotfiles_root.join("p"));
let (gates, host) = host_pair("darwin", "aarch64");
let mut mappings_gates = HashMap::new();
mappings_gates.insert("foo.sh".to_string(), "darwn".to_string());
let err = scanner
.scan_pack(&pack, &default_rules(), &[], &gates, &host, &mappings_gates)
.unwrap_err();
let msg = err.to_string();
assert!(msg.contains("darwn"), "{msg}");
assert!(msg.contains("[mappings.gates]"), "{msg}");
}