// file: crates/ksp-app-backfill-desk/tests/desktop_contract.rs // version: 1 //! Structural desktop contract checks for the Backfill Desk scaffold. #![forbid(unsafe_code)] #![deny(unreachable_pub)] #![warn(missing_docs)] fn app_root() -> std::path::PathBuf { return std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")); } fn workspace_root() -> std::path::PathBuf { return app_root().join("../.."); } fn read_text(path: &std::path::Path) -> String { let source = std::fs::read_to_string(path); assert!(source.is_ok(), "unable to read {}", path.display()); return match source { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => String::new(), }; } fn read_bytes(path: &std::path::Path) -> std::vec::Vec { let source = std::fs::read(path); assert!(source.is_ok(), "unable to read {}", path.display()); return match source { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => std::vec::Vec::new(), }; } #[test] fn pre_002_rust_package_is_mixed_lib_bin_and_workspace_member() { let root = app_root(); let manifest = read_text(root.join("Cargo.toml").as_path()); assert!(manifest.contains("name = \"ksp-app-backfill-desk\"")); assert!(manifest.contains("name = \"ksp_app_backfill_desk_lib\"")); assert!(manifest.contains("[[bin]]")); let workspace = read_text(workspace_root().join("Cargo.toml").as_path()); assert!(workspace.contains("crates/ksp-app-backfill-desk")); let launcher = read_text(root.join("src/main.rs").as_path()); assert!(launcher.contains("ksp_app_backfill_desk_lib::run")); assert!(launcher.contains("try_lock_exclusive")); } #[test] fn pre_002_vite_and_tauri_identity_use_reserved_ports_and_crate_local_hooks() { let root = app_root(); let vite = read_text(root.join("vite.config.ts").as_path()); assert!(vite.contains("port: 1436")); assert!(vite.contains("port: 1437")); assert!(vite.contains("strictPort: true")); let tauri = read_text(root.join("tauri.conf.json").as_path()); assert!(tauri.contains("KSP Backfill Desk")); assert!(tauri.contains("com.sasedev.ksp-app-backfill-desk")); assert!(tauri.contains("http://localhost:1436")); assert!(tauri.contains("npm run dev")); assert!(tauri.contains("npm run build")); assert!(tauri.contains("../../../builds/khadhroony-solana-project/ksp-app-backfill-desk/dist")); } #[test] fn pre_002_package_dependencies_match_desk_baseline() { let package = read_text(app_root().join("package.json").as_path()); for required in [ "@fltsci/tauri-plugin-tracing", "@fortawesome/fontawesome-free", "@tauri-apps/api", "bootstrap", "resize-observer-polyfill", "simplebar", "@tauri-apps/cli", "@types/bootstrap", "@types/node", "sass-embedded", "typescript", "vite", ] { assert!(package.contains(required), "missing Desk package baseline dependency {required}"); } assert!(!package.contains("package-lock")); } #[test] fn pre_002_splash_assets_and_styles_match_existing_desk_template() { let root = app_root(); let reference = workspace_root().join("crates/ksp-app-solprices-desk"); for relative in ["frontend/fonts/DOS_Amazigh.ttf", "frontend/imgs/logo.png", "frontend/imgs/splash.png", "icons/favicon.png", "icons/favicon.ico"] { assert_eq!(read_bytes(root.join(relative).as_path()), read_bytes(reference.join(relative).as_path()), "Desk asset differs: {relative}"); } let splash = read_text(root.join("frontend/splash.html").as_path()); assert!(splash.contains("imgs/splash.png")); assert!(splash.contains("Backfill Desk")); let splash_style = read_text(root.join("frontend/sass/splash.scss").as_path()); let reference_style = read_text(reference.join("frontend/sass/splash.scss").as_path()); let normalized = splash_style.replace("crates/ksp-app-backfill-desk", "crates/ksp-app-solprices-desk").replace("// version: 1", "// version: 2"); assert_eq!(normalized, reference_style); } #[test] fn pre_002_shell_and_splash_use_shared_frontend_tooling() { let root = app_root(); let shell = read_text(root.join("frontend/main.html").as_path()); for required in ["app-header", "app-sidebar", "app-sidebar-scroll", "app-content", "app-footer", "data-simplebar"] { assert!(shell.contains(required), "Backfill Desk shell is missing template marker {required}"); } let main = read_text(root.join("frontend/ts/main.ts").as_path()); assert!(main.contains("resize-observer-polyfill")); assert!(main.contains("simplebar")); assert!(main.contains("bootstrap")); assert!(main.contains("Backfill Desk frontend control clicked")); assert!(main.contains("Backfill Desk navigation tab clicked")); assert!(main.contains("Backfill Desk runtime status refresh button clicked")); let splash = read_text(root.join("frontend/ts/splash.ts").as_path()); assert!(splash.contains("Splash opacity animation started")); assert!(splash.contains("Backfill Desk splash frontend loaded")); }