use serde_json::json;
use super::{Disclosure, digest_of};
const RFC_DISCLOSURE: &str =
"WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsICJmYW1pbHlfbmFtZSIsICJNw7ZiaXVzIl0";
const RFC_DIGEST: &str = "X9yH0Ajrdm1Oij4tWso9UzzKJvPoDxwmuEcO3XAdRC0";
const RFC_VARIANTS: [&str; 3] = [
"WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsICJmYW1pbHlfbmFtZSIsICJNXHUwMGY2Yml1cyJd",
"WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsImZhbWlseV9uYW1lIiwiTcO2Yml1cyJd",
"WwoiXzI2YmM0TFQtYWM2cTJLSTZjQlc1ZXMiLAoiZmFtaWx5X25hbWUiLAoiTcO2Yml1cyIKXQ",
];
#[test]
fn the_rfc_example_disclosure_hashes_to_its_published_digest() {
let d = Disclosure::parse(RFC_DISCLOSURE).expect("the RFC's disclosure parses");
assert_eq!(d.salt(), "_26bc4LT-ac6q2KI6cBW5es");
assert_eq!(d.claim_name(), "family_name");
assert_eq!(d.claim_value(), &json!("Möbius"));
assert_eq!(d.digest(), RFC_DIGEST);
assert_eq!(digest_of(RFC_DISCLOSURE), RFC_DIGEST);
}
#[test]
fn every_rfc_encoding_of_one_claim_reads_the_same_and_hashes_apart() {
let mut digests = vec![digest_of(RFC_DISCLOSURE)];
for variant in RFC_VARIANTS {
let d = Disclosure::parse(variant).expect("each RFC variant parses");
assert_eq!(d.claim_name(), "family_name", "{variant}");
assert_eq!(d.claim_value(), &json!("Möbius"), "{variant}");
assert_eq!(d.digest(), digest_of(variant), "{variant}");
digests.push(d.digest());
}
digests.sort();
digests.dedup();
assert_eq!(digests.len(), 4, "four encodings, four digests");
}
#[test]
fn this_encoder_produces_the_rfc_compact_form() {
let d = Disclosure::with_salt(
"_26bc4LT-ac6q2KI6cBW5es".to_owned(),
"family_name",
json!("Möbius"),
)
.expect("a permitted claim name");
assert_eq!(d.encoded(), RFC_VARIANTS[1]);
}