use crank_config::{field_registry, render}; #[test] fn generated_contract_is_deterministic_complete_and_redacted() { assert_eq!(render::schema_json(), render::schema_json()); let schema: serde_json::Value = serde_json::from_str(&render::schema_json()).unwrap(); assert_eq!( schema["fields"].as_array().unwrap().len(), field_registry().len() ); for section in [render::env_section(false), render::env_section(true)] { assert!(!section.contains("change-me")); assert!(!section.contains("CRANK_RUNTIME_MAX_CONCURRENT_WINDOW")); assert!(!section.contains("CRANK_RUNTIME_MAX_CONCURRENT_JOBS")); assert!(!section.contains("CRANK_CACHE_DEFAULT_TTL_MS")); } } #[test] fn generated_reference_distinguishes_required_and_optional_fields() { let reference = render::reference_section(); assert!(reference.contains( "| `CRANK_MASTER_KEY` | `runtime.master_key` | `Shared` | `secret/-` | `required/blank` |" )); assert!( reference .contains("| `CRANK_DATABASE_URL` | `database.url` | `Shared` | `url/-` | `blank` |") ); assert!(reference.contains( "| `CRANK_LOG_LEVEL` | `observability.log_filter` | `Shared` | `string/-` | `blank` |" )); } #[test] fn marker_replacement_is_bounded_to_the_generated_region() { let input = "before\n# BEGIN GENERATED CRANK RUNTIME CONFIG\nstale\n# END GENERATED CRANK RUNTIME CONFIG\nafter\n"; let output = render::replace_marked( input, render::BEGIN_MARKER, render::END_MARKER, &render::env_section(false), ) .unwrap(); assert!(output.starts_with("before\n")); assert!(output.ends_with("\nafter\n")); assert!(!output.contains("stale")); }