use super::test_utils::setup_test_dir;
use crate::node::{PackageManager, PackageManagerKind};
use std::path::PathBuf;
use tokio::fs;
#[tokio::test]
async fn test_package_manager_kind_lock_files() {
assert_eq!(PackageManagerKind::Npm.lock_file(), "package-lock.json");
assert_eq!(PackageManagerKind::Yarn.lock_file(), "yarn.lock");
assert_eq!(PackageManagerKind::Pnpm.lock_file(), "pnpm-lock.yaml");
assert_eq!(PackageManagerKind::Bun.lock_file(), "bun.lockb");
}
#[tokio::test]
async fn test_package_manager_kind_commands() {
assert_eq!(PackageManagerKind::Npm.command(), "npm");
assert_eq!(PackageManagerKind::Yarn.command(), "yarn");
assert_eq!(PackageManagerKind::Pnpm.command(), "pnpm");
assert_eq!(PackageManagerKind::Bun.command(), "bun");
}
#[tokio::test]
async fn test_package_manager_creation() {
let root = PathBuf::from("/fake/project");
let npm_manager = PackageManager::new(PackageManagerKind::Npm, root.clone());
assert_eq!(npm_manager.kind(), PackageManagerKind::Npm);
assert_eq!(npm_manager.root(), &root);
assert_eq!(npm_manager.lock_file_path(), root.join("package-lock.json"));
}
#[allow(clippy::unwrap_used)]
#[tokio::test]
async fn test_package_manager_detect() {
let temp_dir = setup_test_dir();
let root = temp_dir.path();
let yarn_lock = root.join("yarn.lock");
fs::write(&yarn_lock, "# This file is generated by running \"yarn install\"").await.unwrap();
let detected = PackageManager::detect(root);
assert!(detected.is_ok());
let manager = detected.unwrap();
assert_eq!(manager.kind(), PackageManagerKind::Yarn);
assert_eq!(manager.root(), root);
}
#[tokio::test]
async fn test_package_manager_detect_failure() {
let temp_dir = setup_test_dir();
let root = temp_dir.path();
let detected = PackageManager::detect(root);
assert!(detected.is_err());
}
#[tokio::test]
async fn test_package_manager_lock_file_path() {
let root = PathBuf::from("/project");
let npm_manager = PackageManager::new(PackageManagerKind::Npm, root.clone());
assert_eq!(npm_manager.lock_file_path(), root.join("package-lock.json"));
let yarn_manager = PackageManager::new(PackageManagerKind::Yarn, root.clone());
assert_eq!(yarn_manager.lock_file_path(), root.join("yarn.lock"));
let pnpm_manager = PackageManager::new(PackageManagerKind::Pnpm, root.clone());
assert_eq!(pnpm_manager.lock_file_path(), root.join("pnpm-lock.yaml"));
let bun_manager = PackageManager::new(PackageManagerKind::Bun, root.clone());
assert_eq!(bun_manager.lock_file_path(), root.join("bun.lockb"));
}