use pixelsrc::init::{init_project, InitError, Preset};
use std::fs;
use tempfile::TempDir;
fn temp_dir() -> TempDir {
tempfile::tempdir().expect("Failed to create temp directory")
}
#[test]
fn test_init_preset_minimal() {
let temp = temp_dir();
let project_path = temp.path().join("minimal_project");
let result = init_project(&project_path, "minimal_project", "minimal");
assert!(result.is_ok(), "Minimal preset should succeed: {:?}", result.err());
assert!(project_path.exists(), "Project directory should exist");
assert!(project_path.join("pxl.toml").exists(), "pxl.toml should exist");
}
#[test]
fn test_init_preset_artist() {
let temp = temp_dir();
let project_path = temp.path().join("artist_project");
let result = init_project(&project_path, "artist_project", "artist");
assert!(result.is_ok(), "Artist preset should succeed: {:?}", result.err());
assert!(project_path.exists(), "Project directory should exist");
assert!(project_path.join("pxl.toml").exists(), "pxl.toml should exist");
}
#[test]
fn test_init_preset_animator() {
let temp = temp_dir();
let project_path = temp.path().join("animator_project");
let result = init_project(&project_path, "animator_project", "animator");
assert!(result.is_ok(), "Animator preset should succeed: {:?}", result.err());
assert!(project_path.exists(), "Project directory should exist");
assert!(project_path.join("pxl.toml").exists(), "pxl.toml should exist");
}
#[test]
fn test_init_preset_game() {
let temp = temp_dir();
let project_path = temp.path().join("game_project");
let result = init_project(&project_path, "game_project", "game");
assert!(result.is_ok(), "Game preset should succeed: {:?}", result.err());
assert!(project_path.exists(), "Project directory should exist");
assert!(project_path.join("pxl.toml").exists(), "pxl.toml should exist");
}
#[test]
fn test_init_error_existing_directory() {
let temp = temp_dir();
let project_path = temp.path().join("existing_project");
fs::create_dir_all(&project_path).unwrap();
fs::write(project_path.join("some_file.txt"), "existing content").unwrap();
let result = init_project(&project_path, "existing_project", "minimal");
match result {
Err(InitError::DirectoryExists(_)) => {}
other => panic!("Expected DirectoryExists error, got: {:?}", other),
}
}
#[test]
fn test_init_error_unknown_preset() {
let temp = temp_dir();
let project_path = temp.path().join("unknown_preset_project");
let result = init_project(&project_path, "unknown_preset_project", "invalid_preset");
match result {
Err(InitError::UnknownPreset(name)) => {
assert_eq!(name, "invalid_preset", "Should report the invalid preset name");
}
other => panic!("Expected UnknownPreset error, got: {:?}", other),
}
}
#[test]
fn test_preset_parsing() {
assert_eq!(Preset::from_str("minimal"), Some(Preset::Minimal));
assert_eq!(Preset::from_str("MINIMAL"), Some(Preset::Minimal));
assert_eq!(Preset::from_str("Minimal"), Some(Preset::Minimal));
assert_eq!(Preset::from_str("artist"), Some(Preset::Artist));
assert_eq!(Preset::from_str("animator"), Some(Preset::Animator));
assert_eq!(Preset::from_str("game"), Some(Preset::Game));
assert_eq!(Preset::from_str("unknown"), None);
}
#[test]
fn test_init_empty_existing_directory() {
let temp = temp_dir();
let project_path = temp.path().join("empty_project");
fs::create_dir_all(&project_path).unwrap();
let result = init_project(&project_path, "empty_project", "minimal");
assert!(result.is_ok(), "Should succeed in empty directory: {:?}", result.err());
}