// file: crates/knowledge-web-lib/unit_tests/assets.rs // version: 1 //! Unit tests for Vite asset resolution. #[test] fn development_assets_include_vite_client_before_main_entry() { let assets = match crate::ViteAssets::development("http://127.0.0.1:5173/") { Ok(value) => value, Err(error) => { assert!(error.is_empty(), "unexpected development asset error: {error}"); return; }, }; assert_eq!(assets.scripts().len(), 2); assert_eq!(assets.scripts()[0], "http://127.0.0.1:5173/@vite/client"); assert_eq!(assets.scripts()[1], "http://127.0.0.1:5173/src/main.ts"); assert!(assets.stylesheets().is_empty()); assert!(assets.static_assets_directory().is_none()); assert!(assets.static_mount_path().is_none()); } #[test] fn production_manifest_resolves_hashes_and_asset_base() { let manifest = r#"{ "src/main.ts": { "file": "assets/main-abc.js", "css": ["assets/main-def.css"], "isEntry": true } }"#; let assets = match crate::ViteAssets::from_manifest_text(manifest, "/", std::path::PathBuf::from("/tmp/knowledge-assets")) { Ok(value) => value, Err(error) => { assert!(error.is_empty(), "unexpected manifest error: {error}"); return; }, }; assert_eq!(assets.scripts().len(), 1); assert_eq!(assets.scripts()[0], "/assets/main-abc.js"); assert_eq!(assets.stylesheets().len(), 1); assert_eq!(assets.stylesheets()[0], "/assets/main-def.css"); assert_eq!(assets.static_assets_directory(), Some(std::path::Path::new("/tmp/knowledge-assets"))); assert_eq!(assets.static_mount_path(), Some("/assets")); } #[test] fn manifest_requires_the_stable_main_entry() { let manifest = r#"{"index.html": {"file": "assets/index.js", "isEntry": true}}"#; let result = crate::ViteAssets::from_manifest_text(manifest, "/", std::path::PathBuf::from("/tmp/knowledge-assets")); assert!(result.is_err()); }