// file: crates/ksp-app-store-desk/tests/desktop_security.rs // version: 4 //! Security boundary tests for the Store Desk scaffold. fn parse_json(source: &str) -> serde_json::Result { return serde_json::from_str::(source); } #[test] fn pre_002_capabilities_are_core_and_tracing_only() { let parsed = parse_json(include_str!("../capabilities/default.json")); assert!(parsed.is_ok(), "committed capability JSON must be valid"); let capability = match parsed { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let permissions = capability["permissions"].as_array(); assert!(permissions.is_some(), "capability permissions must be an array"); let permissions = match permissions { std::option::Option::Some(value) => value, std::option::Option::None => return, }; assert_eq!(permissions.len(), 2); assert_eq!(permissions[0], "core:default"); assert_eq!(permissions[1], "tracing:default"); } #[test] fn pre_002_frontend_avoids_network_browser_storage_and_blocking_dialogs() { let frontend = [ include_str!("../frontend/ts/frontend_log.ts"), include_str!("../frontend/ts/invoke.ts"), include_str!("../frontend/ts/main.ts"), include_str!("../frontend/ts/splash.ts"), ] .join("\n"); for forbidden in ["fetch(", "XMLHttpRequest", "localStorage", "sessionStorage", "window.alert", "window.confirm", "window.prompt"] { assert!(!frontend.contains(forbidden), "forbidden frontend primitive present: {forbidden}"); } } #[test] fn pre_003_frontend_tracing_covers_navigation_buttons_tabs_controls_refresh_and_ipc() { let main = include_str!("../frontend/ts/main.ts"); let invoke = include_str!("../frontend/ts/invoke.ts"); assert!(main.contains("navigation button clicked")); assert!(main.contains("diagnostics refresh button clicked")); assert!(main.contains("generic button clicked")); assert!(main.contains("tab control clicked")); assert!(main.contains("tab activated")); assert!(main.contains("interactive control changed")); assert!(main.contains("view activated")); assert!(invoke.contains("IPC command requested")); assert!(invoke.contains("IPC command completed")); assert!(invoke.contains("IPC command failed")); } #[test] fn pre_003_store_desk_development_logging_explicitly_selects_supertrace() { let constants = include_str!("../src/constants.rs"); let bootstrap = include_str!("../src/bootstrap.rs"); assert!(constants.contains("DEVELOPMENT_LOGGING_PROFILE: &str = \"supertrace\"")); assert!(bootstrap.contains("FILE_ID_COMPOSITE_KSP_APP_STORE_DESK")); assert!(bootstrap.contains("logging_profile.profile_id() != crate::DEVELOPMENT_LOGGING_PROFILE")); assert!(bootstrap.contains("LogFilterLevel::Trace")); return; } #[test] fn pre_006_store_status_ipc_is_backend_neutral_and_secret_free() { let dto = include_str!("../src/dto_common.rs"); let runtime = include_str!("../src/store_runtime.rs"); let tauri = include_str!("../src/tauri.rs"); assert!(dto.contains("StoreRuntimeStatusDto")); assert!(runtime.contains("runtime_snapshot")); assert!(runtime.contains("health().await")); assert!(tauri.contains("store_runtime_status")); for forbidden in ["connection_uri", "connectionUri", "postgresql://", "password", "RawPayload", "RawAccountState", "tokio_postgres"] { assert!(!dto.contains(forbidden), "Store status DTO source contains forbidden field/material: {forbidden}"); } }