use super::super::manifest::{package_public_files, package_static_assets};
#[test]
fn package_static_assets_copies_all_files() {
let tmp = tempfile::tempdir().unwrap();
let base = tmp.path();
let assets_dir = base.join("dist/assets");
std::fs::create_dir_all(&assets_dir).unwrap();
std::fs::write(assets_dir.join("main-abc.js"), "// main").unwrap();
std::fs::write(assets_dir.join("chunk-xyz.js"), "// shared chunk").unwrap();
std::fs::write(assets_dir.join("routes-def.js"), "// dynamic entry").unwrap();
std::fs::write(assets_dir.join("main-abc.css"), "body{}").unwrap();
let vite_dir = base.join("dist/.vite");
std::fs::create_dir_all(&vite_dir).unwrap();
std::fs::write(vite_dir.join("manifest.json"), "{}").unwrap();
let out_dir = base.join("output");
let count = package_static_assets(base, &out_dir, "dist").unwrap();
assert_eq!(count, 4);
let public_assets = out_dir.join("public/assets");
assert!(public_assets.join("main-abc.js").exists());
assert!(public_assets.join("chunk-xyz.js").exists());
assert!(public_assets.join("routes-def.js").exists());
assert!(public_assets.join("main-abc.css").exists());
assert!(!out_dir.join("public/.vite").exists());
}
#[test]
fn package_static_assets_handles_flat_layout() {
let tmp = tempfile::tempdir().unwrap();
let base = tmp.path();
let dist = base.join("dist");
std::fs::create_dir_all(&dist).unwrap();
std::fs::write(dist.join("abc123.js"), "// js").unwrap();
std::fs::write(dist.join("def456.css"), "/* css */").unwrap();
let vite_dir = dist.join(".vite");
std::fs::create_dir_all(&vite_dir).unwrap();
std::fs::write(vite_dir.join("manifest.json"), "{}").unwrap();
let out_dir = base.join("output");
let count = package_static_assets(base, &out_dir, "dist").unwrap();
assert_eq!(count, 2);
let public = out_dir.join("public");
assert!(public.join("abc123.js").exists());
assert!(public.join("def456.css").exists());
assert!(!public.join(".vite").exists());
}
#[test]
fn package_static_assets_missing_dist_returns_zero() {
let tmp = tempfile::tempdir().unwrap();
let base = tmp.path();
let out_dir = base.join("output");
let count = package_static_assets(base, &out_dir, "dist").unwrap();
assert_eq!(count, 0);
}
#[test]
fn package_public_files_copies_all_files() {
let tmp = tempfile::tempdir().unwrap();
let base = tmp.path();
let public = base.join("public");
std::fs::create_dir_all(public.join("images")).unwrap();
std::fs::write(public.join("favicon.svg"), "<svg/>").unwrap();
std::fs::write(public.join("robots.txt"), "User-agent: *").unwrap();
std::fs::write(public.join("images/logo.png"), "fake png").unwrap();
let out_dir = base.join("output");
let count = package_public_files(base, &out_dir).unwrap();
assert_eq!(count, 3);
assert!(out_dir.join("public-root/favicon.svg").exists());
assert!(out_dir.join("public-root/robots.txt").exists());
assert!(out_dir.join("public-root/images/logo.png").exists());
}
#[test]
fn package_public_files_returns_zero_when_missing() {
let tmp = tempfile::tempdir().unwrap();
let base = tmp.path();
let out_dir = base.join("output");
let count = package_public_files(base, &out_dir).unwrap();
assert_eq!(count, 0);
}
#[test]
fn package_public_files_does_not_collide_with_static_assets() {
let tmp = tempfile::tempdir().unwrap();
let base = tmp.path();
let public = base.join("public");
std::fs::create_dir_all(&public).unwrap();
std::fs::write(public.join("favicon.ico"), "icon").unwrap();
let dist = base.join("dist");
std::fs::create_dir_all(&dist).unwrap();
std::fs::write(dist.join("main.js"), "// js").unwrap();
let out_dir = base.join("output");
let pub_count = package_public_files(base, &out_dir).unwrap();
let asset_count = package_static_assets(base, &out_dir, "dist").unwrap();
assert_eq!(pub_count, 1);
assert_eq!(asset_count, 1);
assert!(out_dir.join("public-root/favicon.ico").exists());
assert!(out_dir.join("public/main.js").exists());
}