use super::*;
use crate::encoding::percent_encode;
use crate::layout::Xdg;
use crate::reads::test_support::git_checkout;
use tempfile::TempDir;
fn xdg_at(tmp: &TempDir) -> Xdg {
Xdg::with(&tmp.path().join("home"), None, Some(tmp.path().join("state").to_str().unwrap()))
}
#[test]
fn checkout_roots_is_read_only_when_needed() {
let tmp = TempDir::new().unwrap();
let proj = tmp.path().join("proj");
let root = git_checkout(&proj, "one");
assert!(checkout_roots(&proj, false).is_empty(), "needed=false must not walk");
assert_eq!(checkout_roots(&proj, true), vec![root], "needed=true reads the root");
assert!(checkout_roots(&tmp.path().join("nope"), true).is_empty());
}
#[test]
fn is_foreign_is_exactly_a_recorded_root_this_checkout_refuses() {
let roots = vec!["aaa".to_string()];
assert!(!is_foreign(None, &roots)); assert!(!is_foreign(Some("aaa"), &roots)); assert!(is_foreign(Some("bbb"), &roots)); assert!(!is_foreign(Some("bbb"), &[])); }
#[test]
fn row_label_is_empty_off_the_fleet_view_or_for_a_home_row() {
let tmp = TempDir::new().unwrap();
let labels = enrolled_labels(&xdg_at(&tmp)); let roots = vec!["aaa".to_string()];
assert_eq!(row_label(None, Some("bbb"), &roots), "");
assert_eq!(row_label(Some(&labels), None, &roots), "");
assert_eq!(row_label(Some(&labels), Some("aaa"), &roots), "");
assert_eq!(row_label(Some(&labels), Some("deadbeefcafe"), &roots), " [deadbeef]");
}
#[test]
fn enrolled_labels_names_a_foreign_root_by_its_checkout_basename() {
let tmp = TempDir::new().unwrap();
let repo = tmp.path().join("widget");
let root = git_checkout(&repo, "w");
let xdg = xdg_at(&tmp);
let clones = xdg.clones_dir();
fs::create_dir_all(&clones).unwrap();
fs::create_dir_all(clones.join(percent_encode(&repo.to_string_lossy()))).unwrap();
fs::create_dir_all(clones.join(percent_encode("/gone/checkout"))).unwrap();
fs::create_dir_all(clones.join(percent_encode("/"))).unwrap();
fs::create_dir_all(clones.join("not%decodable")).unwrap();
let labels = enrolled_labels(&xdg);
let elsewhere = vec!["ffffffff".to_string()];
assert_eq!(row_label(Some(&labels), Some(&root), &elsewhere), " [widget]");
assert_eq!(row_label(Some(&labels), Some("0123456789ab"), &elsewhere), " [01234567]");
}