Files
khadhroony-solana-project/crates/ksp-app-store-desk/unit_tests/dto_transaction.rs
2026-09-03 17:54:50 +02:00

57 lines
2.5 KiB
Rust

// file: crates/ksp-app-store-desk/unit_tests/dto_transaction.rs
// version: 1
#[test]
fn pre_007_transaction_rows_and_detail_keep_raw_bytes_out_of_table_contract() {
let row = crate::StoreTransactionRowDto {
block_time_unix_millis_decimal: std::option::Option::Some("1720000000000".to_owned()),
content_hash: "11".repeat(32),
format_id: "ksp_raw_tx_v1".to_owned(),
format_version: 1,
payload_size_decimal: std::option::Option::Some("4096".to_owned()),
retention_state: "full".to_owned(),
signature: "22".repeat(64),
slot_decimal: "123456789".to_owned(),
};
let serialized = serde_json::to_value(&row);
assert!(serialized.is_ok());
let serialized = match serialized {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert!(serialized.get("payloadPreviewHex").is_none());
assert!(serialized.get("payload").is_none());
assert_eq!(serialized["payloadSizeDecimal"], "4096");
let detail = crate::StoreTransactionDetailDto {
block_time_unix_millis_decimal: std::option::Option::None,
content_hash: "33".repeat(32),
format_id: "ksp_raw_tx_v1".to_owned(),
format_version: 1,
payload_preview_hex: std::option::Option::Some("abcd".to_owned()),
payload_preview_truncated: true,
payload_size_decimal: std::option::Option::Some("8192".to_owned()),
retention_state: "archived".to_owned(),
signature: "44".repeat(64),
slot_decimal: "987654321".to_owned(),
};
let serialized = serde_json::to_value(&detail);
assert!(serialized.is_ok());
let serialized = match serialized {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert_eq!(serialized["payloadPreviewHex"], "abcd");
assert_eq!(serialized["payloadPreviewTruncated"], true);
}
#[test]
fn pre_007_transaction_query_request_contains_only_random_access_and_explicit_store_filters() {
let source = include_str!("../src/dto_transaction.rs");
for required in ["direction", "offset", "limit", "slot_max", "slot_min"] {
assert!(source.contains(required), "missing Store transaction query field: {required}");
}
for forbidden in ["draw", "columns", "search", "order", "cursor", "connection_uri", "endpoint"] {
assert!(!source.contains(&format!("pub(crate) {forbidden}")), "DataTables/physical field leaked into Store transaction query DTO: {forbidden}");
}
}