use opencode_ralph_loop_cli::hash::sha256_hex;
use opencode_ralph_loop_cli::templates::{RenderContext, canonical_templates, render_template};
use proptest::prelude::*;
proptest! {
#[test]
fn prop_sha256_deterministic(data: Vec<u8>) {
prop_assert_eq!(sha256_hex(&data), sha256_hex(&data));
}
#[test]
fn prop_sha256_size_64(data: Vec<u8>) {
prop_assert_eq!(sha256_hex(&data).len(), 64);
}
#[test]
fn prop_sha256_only_hex(data: Vec<u8>) {
let h = sha256_hex(&data);
prop_assert!(
h.chars().all(|c| c.is_ascii_hexdigit()),
"hash contains invalid character: {h}"
);
}
#[test]
fn prop_render_context_accepts_any_version(version: String) {
let ctx = RenderContext::with_version(&version);
prop_assert_eq!(ctx.plugin_version, version);
}
#[test]
fn prop_canonical_templates_all_render(
idx in 0usize..canonical_templates().len()
) {
let ctx = RenderContext::default();
let template = canonical_templates()[idx];
let result = render_template(template, &ctx);
prop_assert!(result.is_some(), "template {template} did not render");
let bytes = result.unwrap();
prop_assert!(!bytes.is_empty(), "template {template} returned empty");
}
}