#![cfg(feature = "wasm")]
extern crate wasm_bindgen_test;
use wasm_bindgen_test::*;
use nil_zonefile::wasm;
use nil_zonefile::ZoneFile;
wasm_bindgen_test_configure!(run_in_node_experimental);
#[wasm_bindgen_test]
fn test_parse_clarity_buffer() {
let sample_json = r#"{"v":"0","owner":"SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8","general":"Test.Name","twitter":"@test","url":"test.locker","nostr":"","lightning":"","btc":"bc1","subdomains":{}}"#;
let hex_string = format!("0x{}", hex::encode(sample_json));
let result = wasm::parse_zonefile_from_clarity_buffer_hex_string(&hex_string);
println!("result: {:?}", result);
assert!(result.is_ok());
let cbor_bytes = result.unwrap();
let zonefile = ZoneFile::from_bytes(&cbor_bytes).unwrap();
match zonefile {
ZoneFile::V0 { owner, general, twitter, url, nostr, lightning, btc, subdomains } => {
assert_eq!(owner, "SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8");
assert_eq!(general, "Test.Name");
assert_eq!(twitter, "@test");
assert_eq!(url, "test.locker");
assert_eq!(nostr, "");
assert_eq!(lightning, "");
assert_eq!(btc, "bc1");
assert!(subdomains.is_empty());
}
_ => panic!("Expected V0 zonefile"),
}
}
#[wasm_bindgen_test]
fn test_generate_zonefile() {
let sample_json = r#"{"v":"0","owner":"SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8","general":"Test.Name","twitter":"@test","url":"test.locker","nostr":"","lightning":"","btc":"bc1","subdomains":{}}"#;
let zonefile: ZoneFile = serde_json::from_str(sample_json).unwrap();
let js_value = serde_wasm_bindgen::to_value(&zonefile).unwrap();
let result = wasm::generate_zonefile(js_value.clone(), false);
assert!(result.is_ok());
let cbor_bytes = result.unwrap();
let parsed = ZoneFile::from_cbor(&cbor_bytes).unwrap();
match parsed {
ZoneFile::V0 { owner, .. } => {
assert_eq!(owner, "SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8");
}
_ => panic!("Expected V0 zonefile"),
}
let compressed = wasm::generate_zonefile(js_value, true);
assert!(compressed.is_ok());
let compressed_bytes = compressed.unwrap();
let parsed_compressed = ZoneFile::from_bytes(&compressed_bytes).unwrap();
match parsed_compressed {
ZoneFile::V0 { owner, .. } => {
assert_eq!(owner, "SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8");
}
_ => panic!("Expected V0 zonefile"),
}
}
#[wasm_bindgen_test]
fn test_parse_invalid_hex() {
let result = wasm::parse_zonefile_from_clarity_buffer_hex_string("invalid hex");
assert!(result.is_err());
let result = wasm::parse_zonefile_from_clarity_buffer_hex_string("");
assert!(result.is_err());
let result = wasm::parse_zonefile_from_clarity_buffer_hex_string("0xa");
assert!(result.is_err());
}
#[wasm_bindgen_test]
fn test_parse_invalid_cbor() {
let result = wasm::parse_zonefile_from_clarity_buffer_hex_string("0xffff");
assert!(result.is_err());
}