#![allow(deprecated)]
use assert2::assert;
use assert2::check;
use assert2::let_assert;
use tempfile::TempDir;
use tree_type::CreateDefaultOutcome;
use tree_type::tree_type;
#[allow(dead_code)]
fn default_config(file: &ProjectRootConfig) -> Result<String, std::io::Error> {
Ok(format!("# Config for {}\n", file.as_path().display()))
}
tree_type! {
ProjectRoot {
#[default(default_config)]
config("config.toml"),
}
}
#[test]
fn test_create_default_creates_file() {
let_assert!(Ok(tempdir) = TempDir::new());
let project = ProjectRoot::new(tempdir.path()).unwrap();
let config = project.config();
check!(!config.exists());
let_assert!(Ok(outcome) = config.create_default::<std::io::Error>());
assert!(outcome == CreateDefaultOutcome::Created);
check!(config.exists());
let_assert!(Ok(content) = config.read_to_string());
assert!(content.starts_with("# Config for"));
}
#[test]
fn test_create_default_already_exists() {
let_assert!(Ok(tempdir) = TempDir::new());
let project = ProjectRoot::new(tempdir.path()).unwrap();
let config = project.config();
let_assert!(Ok(()) = config.write("existing content"));
check!(config.exists());
let_assert!(Ok(outcome) = config.create_default::<std::io::Error>());
assert!(outcome == CreateDefaultOutcome::AlreadyExists);
let_assert!(Ok(content) = config.read_to_string());
assert!(content == "existing content");
}