govctl 0.9.2

Project governance CLI for RFC, ADR, and Work Item management
use super::canonical_json::canonicalize_json;
use super::*;
use serde_json::Value;

#[test]
fn test_canonicalize_sorts_keys() -> Result<(), Box<dyn std::error::Error>> {
    let json: Value = serde_json::from_str(r#"{"z": 1, "a": 2, "m": 3}"#)?;
    let canonical = canonicalize_json(&json);
    assert_eq!(canonical, r#"{"a":2,"m":3,"z":1}"#);
    Ok(())
}

#[test]
fn test_canonicalize_nested_objects() -> Result<(), Box<dyn std::error::Error>> {
    let json: Value = serde_json::from_str(r#"{"outer": {"z": 1, "a": 2}, "inner": {"b": 3}}"#)?;
    let canonical = canonicalize_json(&json);
    assert_eq!(canonical, r#"{"inner":{"b":3},"outer":{"a":2,"z":1}}"#);
    Ok(())
}

#[test]
fn test_extract_signature() {
    let md = r#"---
status: normative
---

<!-- GENERATED: do not edit. Source: RFC-0000 -->
<!-- SIGNATURE: sha256:abcd1234 -->

# RFC-0000
"#;
    assert_eq!(extract_signature(md), Some("abcd1234".to_string()));
}

#[test]
fn test_extract_signature_not_found() {
    let md = "# Just a plain markdown file";
    assert_eq!(extract_signature(md), None);
}