v0.3.7-pre.012
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_contract.rs
|
||||
// version: 13
|
||||
// version: 14
|
||||
|
||||
//! Structural desktop contract checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -404,3 +404,33 @@ fn pre_011_resume_reissues_rust_only_checkpoint_for_new_backend_job_without_ipc_
|
||||
assert!(html.contains("resumeBackfillRun"));
|
||||
assert!(html.contains("Reprendre"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_012_free_address_autocomplete_is_html_datalist_derived_from_core_registry() {
|
||||
let root = app_root();
|
||||
let dto = read_text(root.join("src/dto_common.rs").as_path());
|
||||
assert!(dto.contains("ksp_core_lib::entries()"));
|
||||
assert!(dto.contains("ProgramIdAutocompleteOptionDto"));
|
||||
assert!(dto.contains("program_id_autocomplete_options"));
|
||||
let html = read_text(root.join("frontend/main.html").as_path());
|
||||
assert!(html.contains("list=\"backfillProgramIds\""));
|
||||
assert!(html.contains("<datalist id=\"backfillProgramIds\"></datalist>"));
|
||||
assert!(html.contains("toute adresse Solana valide reste acceptée"));
|
||||
let frontend = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
for required in [
|
||||
"renderProgramIdAutocomplete(options.programIdOptions)",
|
||||
"option.value = program.programId",
|
||||
"option.dataset.code = program.code",
|
||||
"option.dataset.domain = program.domain",
|
||||
"registryMatch: selected !== null",
|
||||
"Backfill Desk Program ID autocomplete dataset rendered",
|
||||
] {
|
||||
assert!(frontend.contains(required), "missing pre.012 autocomplete marker {required}");
|
||||
}
|
||||
for forbidden in
|
||||
["AddressLookupTab1e1111111111111111111111111", "ComputeBudget111111111111111111111111111111", "Vote111111111111111111111111111111111111111"]
|
||||
{
|
||||
assert!(!frontend.contains(forbidden), "frontend hardcodes canonical Program ID {forbidden}");
|
||||
assert!(!html.contains(forbidden), "HTML hardcodes canonical Program ID {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_security.rs
|
||||
// version: 14
|
||||
// version: 15
|
||||
|
||||
//! Security and dependency-boundary checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -339,3 +339,29 @@ fn pre_011_resume_surface_exposes_only_new_job_acknowledgement_and_never_checkpo
|
||||
assert!(!resume_source.contains(forbidden), "Resume frontend sends or logs forbidden payload marker {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_012_program_id_autocomplete_exposes_only_public_registry_metadata_and_no_browser_storage() {
|
||||
let root = app_root();
|
||||
let dto_source = read_text(root.join("src/dto_common.rs").as_path());
|
||||
let dto = struct_source(dto_source.as_str(), "ProgramIdAutocompleteOptionDto");
|
||||
for required in ["code", "domain", "family", "name", "program_id", "protocol"] {
|
||||
assert!(dto.contains(required), "Program ID autocomplete DTO missing safe registry field {required}");
|
||||
}
|
||||
for forbidden in ["url", "credential", "token", "secret", "endpoint", "connection", "private_key"] {
|
||||
assert!(!dto.contains(forbidden), "Program ID autocomplete DTO leaks forbidden marker {forbidden}");
|
||||
}
|
||||
let frontend = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
for forbidden in ["localStorage", "sessionStorage", "indexedDB", "document.cookie"] {
|
||||
assert!(!frontend.contains(forbidden), "frontend persists campaign/autocomplete material via {forbidden}");
|
||||
}
|
||||
let selection_marker = frontend.find("Backfill Desk address autocomplete selection evaluated");
|
||||
assert!(selection_marker.is_some());
|
||||
let selection_source = match selection_marker {
|
||||
std::option::Option::Some(index) => &frontend[index..std::cmp::min(index + 320, frontend.len())],
|
||||
std::option::Option::None => "",
|
||||
};
|
||||
assert!(selection_source.contains("programCode"));
|
||||
assert!(selection_source.contains("registryMatch"));
|
||||
assert!(!selection_source.contains("address.value"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user