v0.3.8-pre.008

This commit is contained in:
2026-09-03 19:53:25 +02:00
parent 10515d1562
commit 489d686023
16 changed files with 1050 additions and 35 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-app-store-desk/tests/desktop_contract.rs
// version: 6
// version: 7
//! Desktop template and frontend contract tests for the Store Desk scaffold.
@@ -80,7 +80,7 @@ fn pre_002_binary_assets_reuse_the_ksp_desktop_template_byte_exact() {
}
#[test]
fn pre_007_shell_exposes_transaction_filters_detail_and_keeps_account_skeleton_unconnected() {
fn pre_007_shell_exposes_transaction_filters_detail_and_planned_account_view() {
let html = include_str!("../frontend/main.html");
for view in ["overview", "transactions", "accounts", "diagnostics"] {
assert!(html.contains(&format!("data-view=\"{view}\"")));
@@ -95,11 +95,10 @@ fn pre_007_shell_exposes_transaction_filters_detail_and_keeps_account_skeleton_u
for transaction_id in ["refreshTransactions", "transactionSlotMin", "transactionSlotMax", "transactionDirection", "transactionDetailModal"] {
assert!(html.contains(&format!("id=\"{transaction_id}\"")), "missing pre.007 transaction control: {transaction_id}");
}
assert!(html.contains("jusqu'à pre.008"));
}
#[test]
fn pre_007_transaction_datatable_is_server_side_while_account_remains_unconnected_and_no_second_pager_exists() {
fn pre_007_transaction_datatable_is_server_side_and_no_second_pager_exists() {
let source = include_str!("../frontend/ts/main.ts");
assert!(source.contains("datatables.net-bs5"));
assert!(source.contains("paging: true"));
@@ -108,8 +107,6 @@ fn pre_007_transaction_datatable_is_server_side_while_account_remains_unconnecte
assert!(source.contains("store_query_transactions"));
assert!(source.contains("serverSide: true"));
assert!(source.contains("Store Desk transaction DataTable initialized"));
assert!(source.contains("Store Desk account DataTable skeleton initialized"));
assert!(source.contains("serverSide: false"));
assert!(source.contains("searching: false"));
assert!(source.contains("ordering: false"));
let html = include_str!("../frontend/main.html");
@@ -231,3 +228,47 @@ fn pre_007_fix_002_payload_preview_remains_bounded_and_is_explicitly_copyable()
assert!(frontend.contains("const previousTitle = button.title"));
assert!(frontend.contains("button.title = previousTitle"));
}
#[test]
fn pre_008_account_ipc_maps_datatables_filters_counts_and_bounded_detail_without_cursor_contract() {
let dto = include_str!("../src/dto_account.rs");
let runtime = include_str!("../src/store_runtime.rs");
let tauri = include_str!("../src/tauri.rs");
let frontend = include_str!("../frontend/ts/main.ts");
assert!(dto.contains("records_total_decimal"));
assert!(dto.contains("records_filtered_decimal"));
assert!(runtime.contains("RawAccountStateInspectionQuery::new"));
assert!(runtime.contains("RawInspectionPageRequest::new(offset, limit)"));
assert!(runtime.contains("RawAccountStateRead::get_raw_account_state"));
assert!(runtime.contains("const ACCOUNT_DETAIL_PREVIEW_BYTES: usize = 512;"));
assert!(tauri.contains("store_query_accounts"));
assert!(tauri.contains("store_get_account_detail"));
assert!(frontend.contains("store_query_accounts"));
assert!(frontend.contains("store_get_account_detail"));
assert!(frontend.contains("pubkey: pubkey === "" ? null : pubkey"));
assert!(frontend.contains("recordsTotalDecimal"));
assert!(frontend.contains("recordsFilteredDecimal"));
assert!(frontend.contains("data-account-detail"));
assert!(!dto.contains("RawPageCursor"));
assert!(!frontend.contains("storePager"));
}
#[test]
fn pre_008_account_datatable_is_server_side_copyable_and_uses_datatables_as_only_pager() {
let frontend = include_str!("../frontend/ts/main.ts");
let html = include_str!("../frontend/main.html");
assert!(frontend.contains("Store Desk account DataTable initialized"));
assert!(frontend.contains("Store Desk account DataTables server-side query started"));
assert!(frontend.contains(r#"renderCopyableLongText(String(data), "account-pubkey")"#));
assert!(frontend.contains(r#"renderCopyableLongText(String(data), "account-state-hash")"#));
assert!(frontend.contains(r#"renderCopyableLongText(String(data), "account-owner")"#));
assert!(frontend.contains(r#"dataPreviewCopy.dataset.copyField = "account-data-preview""#));
for control in ["refreshAccounts", "accountPubkey", "accountSlotMin", "accountSlotMax", "accountDirection", "accountDetailModal"] {
assert!(html.contains(&format!("id=\"{control}\"")), "missing pre.008 account control: {control}");
}
assert!(html.contains("Account data preview hex"));
assert!(html.contains("Preview tronquée à 512 bytes"));
for forbidden in ["Premier", "Précédent", "Suivant", "storePager", "store-pagination"] {
assert!(!html.contains(forbidden), "second Store pager marker present: {forbidden}");
}
}