use hash_attestation::canonical_hash;
#[test]
fn identical_inputs_hash_identically() {
let a = serde_json::json!({"foo": 1, "bar": "x"});
let b = serde_json::json!({"bar": "x", "foo": 1});
assert_eq!(canonical_hash(&a).unwrap(), canonical_hash(&b).unwrap());
}
#[test]
fn different_inputs_hash_differently() {
let a = serde_json::json!({"foo": 1});
let b = serde_json::json!({"foo": 2});
assert_ne!(canonical_hash(&a).unwrap(), canonical_hash(&b).unwrap());
}
#[test]
fn hash_string_starts_with_sha256_prefix() {
let v = serde_json::json!({"x": 1});
let h = canonical_hash(&v).unwrap();
assert!(h.starts_with("sha256:"));
assert_eq!(h.len(), "sha256:".len() + 64);
}
#[test]
fn hash_is_stable_across_runs() {
let v = serde_json::json!({"b": [true, null], "a": 1});
let h = canonical_hash(&v).unwrap();
let v2 = serde_json::json!({"a": 1, "b": [true, null]});
assert_eq!(h, canonical_hash(&v2).unwrap());
}
#[test]
fn whitespace_in_string_values_preserved() {
let a = serde_json::json!({"name": "Acme Inc."});
let b = serde_json::json!({"name": "Acme Inc."});
assert_ne!(canonical_hash(&a).unwrap(), canonical_hash(&b).unwrap());
}