#![cfg(all(target_arch = "wasm32", feature = "wasm"))]
use dig_urn_resolver::cache::{DiskArtifacts, DiskCache};
use dig_urn_resolver::node_fs;
use wasm_bindgen::prelude::*;
use wasm_bindgen_test::*;
#[wasm_bindgen(inline_js = "
import * as fs from 'node:fs';
import * as os from 'node:os';
import * as path from 'node:path';
export function node_fs() { return fs; }
export function unique_dir() {
return path.join(os.tmpdir(), 'dig-urn-resolver-test-' + Date.now() + '-' + Math.random().toString(36).slice(2));
}
")]
extern "C" {
fn node_fs() -> JsValue;
fn unique_dir() -> String;
}
fn artifacts() -> DiskArtifacts {
DiskArtifacts {
ciphertext: vec![0xde, 0xad, 0xbe, 0xef],
proof_b64: "cHJvb2Y=".to_string(),
chunk_lens: vec![4],
}
}
#[wasm_bindgen_test]
fn node_fs_is_inert_until_injected_then_available() {
node_fs::set_node_fs(&node_fs());
assert!(node_fs::is_available(), "fs injected ⇒ disk cache live");
}
#[wasm_bindgen_test]
fn disk_cache_round_trips_through_node_fs() {
node_fs::set_node_fs(&node_fs());
let dir = unique_dir();
let cache = DiskCache::new(&dir);
let art = artifacts();
assert!(cache.get("k").is_none(), "cold cache misses");
cache.put("k", &art);
assert_eq!(
cache.get("k"),
Some(art.clone()),
"written artifacts read back"
);
let reopened = DiskCache::new(&dir);
assert_eq!(reopened.get("k"), Some(art), "persists across handles");
cache.remove("k");
assert!(cache.get("k").is_none(), "removed entry is gone");
}