v0.2.6-pre.007
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-wallet-desk/tests/config_composition.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
//! Config composition contracts introduced for Wallet Desk pre.003.
|
||||
|
||||
@@ -119,3 +119,51 @@ fn assert_component(composite: &ksp_config_lib::ResolvedConfigComposite, compone
|
||||
assert_eq!(component.resolved().selection_source(), ksp_config_lib::ConfigProfileSelectionSource::Composite);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn wallet_desk_composite_transport_profile_builds_get_balance_pool() {
|
||||
let engine = workspace_engine();
|
||||
assert!(engine.is_ok(), "workspace Config engine should be constructible: {engine:?}");
|
||||
let engine = match engine {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let file_id = ksp_config_lib::ConfigFileId::new(ksp_config_lib::FILE_ID_COMPOSITE_KSP_APP_WALLET_DESK);
|
||||
assert!(file_id.is_ok());
|
||||
let file_id = match file_id {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let composite = engine.load_resolved_composite(&file_id, std::option::Option::None);
|
||||
assert!(composite.is_ok(), "committed Wallet Desk composite should resolve: {composite:?}");
|
||||
let composite = match composite {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let component = composite.component("transport");
|
||||
assert!(component.is_some());
|
||||
let component = match component {
|
||||
std::option::Option::Some(value) => value,
|
||||
std::option::Option::None => return,
|
||||
};
|
||||
let environment = ksp_config_lib::ConfigEnvironment::from_maps(std::collections::BTreeMap::new(), std::collections::BTreeMap::new());
|
||||
let resolved = engine.resolve_transport_config_profile(component.resolved(), &environment);
|
||||
assert!(resolved.is_ok(), "composite-selected Transport should map: {resolved:?}");
|
||||
let resolved = match resolved {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_eq!(resolved.selection_source(), ksp_config_lib::ConfigProfileSelectionSource::Composite);
|
||||
let pool = ksp_onchain_transport_lib::HttpTransportPool::new(resolved.into_settings());
|
||||
assert!(pool.is_ok(), "mapped Transport settings should construct a pool");
|
||||
let pool = match pool {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let descriptor = ksp_onchain_transport_lib::find_http_rpc_method("getBalance");
|
||||
assert!(descriptor.is_some());
|
||||
if let std::option::Option::Some(descriptor) = descriptor {
|
||||
let selection = pool.select_for_method(&ksp_onchain_transport_lib::HttpRoleName::new("default"), descriptor);
|
||||
assert!(selection.is_ok(), "getBalance should route through the composite-selected Transport pool: {selection:?}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-wallet-desk/tests/desktop_contract.rs
|
||||
// version: 6
|
||||
// version: 7
|
||||
|
||||
//! Desktop build, shell and Config-status contract audits for Wallet Desk.
|
||||
|
||||
@@ -172,3 +172,29 @@ fn pre_006_unlock_surface_is_explicit_backend_owned_and_supports_view_owner() {
|
||||
assert!(main.contains("beginFrontendUnlock"));
|
||||
assert!(main.contains("configuredSecretCandidateCount"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_balance_uses_authorized_pubkey_and_composite_transport() {
|
||||
let root = app_root();
|
||||
let manifest = read_text(root.join("Cargo.toml").as_path());
|
||||
let state = read_text(root.join("src/app_state.rs").as_path());
|
||||
let transport = read_text(root.join("src/transport_runtime.rs").as_path());
|
||||
let balance = read_text(root.join("src/wallet_balance.rs").as_path());
|
||||
let tauri = read_text(root.join("src/tauri.rs").as_path());
|
||||
let html = read_text(root.join("frontend/main.html").as_path());
|
||||
let main = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
assert!(manifest.contains("ksp-onchain-transport-lib = { path = \"../ksp-onchain-transport-lib\" }"));
|
||||
assert!(transport.contains("resolve_transport_config_profile"));
|
||||
assert!(transport.contains("HttpTransportPool::new"));
|
||||
assert!(transport.contains("getBalance"));
|
||||
assert!(state.contains("get_balance"));
|
||||
assert!(state.contains("SolanaCommitment::Confirmed"));
|
||||
assert!(state.contains("wallet.pubkey()"));
|
||||
assert!(balance.contains("WalletBalanceDto"));
|
||||
assert!(balance.contains("format_lamports_as_sol"));
|
||||
assert!(tauri.contains("refresh_wallet_balance"));
|
||||
assert!(html.contains("id=\"refreshWalletBalance\""));
|
||||
assert!(html.contains("id=\"detailsBalanceLamports\""));
|
||||
assert!(main.contains("renderWalletBalance"));
|
||||
assert!(main.contains("refresh_wallet_balance"));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-wallet-desk/tests/desktop_security.rs
|
||||
// version: 6
|
||||
// version: 7
|
||||
|
||||
//! Static desktop security contracts for the Wallet Desk pre.002 shell.
|
||||
|
||||
@@ -102,3 +102,27 @@ fn wallet_selection_does_not_auto_unlock_configured_secrets() {
|
||||
assert!(!selection.contains("unlock_wallet_view_configured"));
|
||||
assert!(!selection.contains("unlock_wallet_owner_configured"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn balance_refresh_never_accepts_pubkey_or_endpoint_url_from_frontend() {
|
||||
let root = app_root();
|
||||
let state = read_text(root.join("src/app_state.rs").as_path());
|
||||
let tauri = read_text(root.join("src/tauri.rs").as_path());
|
||||
let main = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
let command_start = tauri.find("async fn refresh_wallet_balance");
|
||||
assert!(command_start.is_some());
|
||||
let command = &tauri[command_start.unwrap_or_default()..];
|
||||
let command = command.split("#[tauri::command]").next().unwrap_or_default();
|
||||
assert!(!command.contains("request:"));
|
||||
assert!(!command.contains("pubkey"));
|
||||
let refresh_start = main.find("async function refreshWalletBalance");
|
||||
let refresh_end = main.find("function bindBalanceActions");
|
||||
assert!(refresh_start.is_some());
|
||||
assert!(refresh_end.is_some());
|
||||
let refresh = &main[refresh_start.unwrap_or_default()..refresh_end.unwrap_or(main.len())];
|
||||
assert!(refresh.contains("refresh_wallet_balance"));
|
||||
assert!(!refresh.contains("pubkey"));
|
||||
assert!(!main.contains("transportUrl"));
|
||||
assert!(!main.contains("endpointUrl"));
|
||||
assert!(state.contains("wallet.pubkey()"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user