1#![cfg_attr(not(test), allow(dead_code))]
2
3use std::path::{Path, PathBuf};
4
5pub fn resolve_kanban_root(base: &Path) -> PathBuf {
11 let preferred = base.join(".batty").join("kanban");
12 if preferred.is_dir() {
13 preferred
14 } else {
15 let legacy = base.join("kanban");
16 if legacy.is_dir() { legacy } else { preferred }
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn prefers_batty_kanban_when_it_exists() {
26 let tmp = tempfile::tempdir().unwrap();
27 std::fs::create_dir_all(tmp.path().join(".batty").join("kanban")).unwrap();
28 std::fs::create_dir_all(tmp.path().join("kanban")).unwrap();
29
30 let result = resolve_kanban_root(tmp.path());
31 assert_eq!(result, tmp.path().join(".batty").join("kanban"));
32 }
33
34 #[test]
35 fn falls_back_to_legacy_kanban() {
36 let tmp = tempfile::tempdir().unwrap();
37 std::fs::create_dir_all(tmp.path().join("kanban")).unwrap();
38
39 let result = resolve_kanban_root(tmp.path());
40 assert_eq!(result, tmp.path().join("kanban"));
41 }
42
43 #[test]
44 fn returns_preferred_when_neither_exists() {
45 let tmp = tempfile::tempdir().unwrap();
46
47 let result = resolve_kanban_root(tmp.path());
48 assert_eq!(result, tmp.path().join(".batty").join("kanban"));
49 }
50}