v0.3.8-pre.007
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-store-desk/tests/desktop_security.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
//! Security boundary tests for the Store Desk scaffold.
|
||||
|
||||
@@ -80,3 +80,51 @@ fn pre_006_store_status_ipc_is_backend_neutral_and_secret_free() {
|
||||
assert!(!dto.contains(forbidden), "Store status DTO source contains forbidden field/material: {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_transaction_rows_are_payload_free_detail_is_bounded_and_filter_values_are_not_logged() {
|
||||
let dto = include_str!("../src/dto_transaction.rs");
|
||||
let runtime = include_str!("../src/store_runtime.rs");
|
||||
let frontend = include_str!("../frontend/ts/main.ts");
|
||||
let row_start = dto.find("pub(crate) struct StoreTransactionRowDto");
|
||||
let response_start = dto.find("pub(crate) struct StoreTransactionQueryResponseDto");
|
||||
assert!(row_start.is_some());
|
||||
assert!(response_start.is_some());
|
||||
if let (std::option::Option::Some(row_start), std::option::Option::Some(response_start)) = (row_start, response_start) {
|
||||
let row_source = &dto[row_start..response_start];
|
||||
assert!(!row_source.contains("payload_preview_hex"));
|
||||
assert!(!row_source.contains("payload: "));
|
||||
}
|
||||
assert!(dto.contains("payload_preview_hex"));
|
||||
assert!(dto.contains("payload_preview_truncated"));
|
||||
assert!(runtime.contains("TRANSACTION_DETAIL_PREVIEW_BYTES: usize = 512"));
|
||||
assert!(runtime.contains("std::cmp::min(payload_bytes.len(), TRANSACTION_DETAIL_PREVIEW_BYTES)"));
|
||||
assert!(frontend.contains("transaction DataTables server-side query started"));
|
||||
assert!(frontend.contains("transaction DataTables page changed"));
|
||||
assert!(frontend.contains("transaction DataTables page length changed"));
|
||||
assert!(frontend.contains("transaction DataTables redraw completed"));
|
||||
assert!(frontend.contains("transaction detail opened"));
|
||||
assert!(frontend.contains("transaction detail closed"));
|
||||
for forbidden in [
|
||||
"frontendDebug(\"main\", \"Store Desk transaction Store filter changed\", { slotMin",
|
||||
"frontendDebug(\"main\", \"Store Desk transaction Store filter changed\", { slotMax",
|
||||
"frontendDebug(\"main\", \"Store Desk transaction detail opened\", { signature",
|
||||
"payloadPreviewHex:",
|
||||
] {
|
||||
assert!(!frontend.contains(forbidden), "transaction business/filter value leaked into frontend tracing: {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_transaction_request_rejects_datatables_search_order_draw_and_physical_material() {
|
||||
let dto = include_str!("../src/dto_transaction.rs");
|
||||
let runtime = include_str!("../src/store_runtime.rs");
|
||||
for forbidden in ["draw:", "columns:", "search:", "order:", "cursor:", "connection_uri", "postgresql://", "endpoint"] {
|
||||
assert!(!dto.contains(forbidden), "forbidden DataTables/physical request material present: {forbidden}");
|
||||
}
|
||||
assert!(runtime.contains("25 | 50 | 100"));
|
||||
assert!(runtime.contains("request.offset.parse::<u64>()"));
|
||||
assert!(runtime.contains("RawSlotRange::new"));
|
||||
assert!(runtime.contains("\"ascending\" =>"));
|
||||
assert!(runtime.contains("\"descending\" =>"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user