use tidepool_rpc::das::{AccountDecoder, TokenMetadataDecoder};
#[test]
fn decoder_program_id_and_name() {
let d = TokenMetadataDecoder;
assert_eq!(
d.program_id(),
"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
);
assert_eq!(d.name(), "V1_NFT");
}
#[test]
fn empty_data_returns_none() {
let decoded = TokenMetadataDecoder.decode("pk", &[]).unwrap();
assert!(decoded.is_none());
}
#[test]
fn key_edition_v1_byte_returns_none() {
let decoded = TokenMetadataDecoder.decode("pk", &[1, 2, 3]).unwrap();
assert!(decoded.is_none());
}
#[test]
fn key_master_edition_v1_byte_returns_none() {
let decoded = TokenMetadataDecoder.decode("pk", &[2, 0, 0, 0]).unwrap();
assert!(decoded.is_none());
}
#[test]
fn uninitialized_byte_returns_none() {
let decoded = TokenMetadataDecoder.decode("pk", &[0]).unwrap();
assert!(decoded.is_none());
}
#[test]
fn malformed_metadata_v1_body_returns_error() {
let mut data = vec![4u8]; data.extend_from_slice(&[0; 5]); let result = TokenMetadataDecoder.decode("pk", &data);
assert!(
result.is_err(),
"malformed MetadataV1 should be an explicit error, not None"
);
}