()
| 992 | |
| 993 | #[test] |
| 994 | fn program_template_validation_reports_asset_issues() { |
| 995 | let template = ProgramTemplate::new("bad name", "") |
| 996 | .with_parameter(ProgramParameter::required("query", "Query")) |
| 997 | .with_parameter(ProgramParameter::required("query", "Duplicate query")) |
| 998 | .with_step( |
| 999 | ProgramStepTemplate::new( |
| 1000 | "", |
| 1001 | serde_json::json!({ |
| 1002 | "pattern": "{{missing}}", |
| 1003 | "dangling": "{{query" |
| 1004 | }), |
| 1005 | ) |
| 1006 | .with_label("scan"), |
| 1007 | ) |
| 1008 | .with_step( |
| 1009 | ProgramStepTemplate::new("grep", serde_json::json!({ "pattern": "{{query}}" })) |
| 1010 | .with_label("scan"), |
| 1011 | ); |
| 1012 | |
| 1013 | let validation = template.validate(); |
| 1014 | let codes = validation |
| 1015 | .issues |
| 1016 | .iter() |
| 1017 | .map(|issue| issue.code.as_str()) |
| 1018 | .collect::<Vec<_>>(); |
| 1019 | |
| 1020 | assert!(!validation.is_valid()); |
| 1021 | assert!(codes.contains(&"invalid_name")); |
| 1022 | assert!(codes.contains(&"empty_description")); |
| 1023 | assert!(codes.contains(&"duplicate_parameter")); |
| 1024 | assert!(codes.contains(&"empty_tool_name")); |
| 1025 | assert!(codes.contains(&"unknown_placeholder")); |
| 1026 | assert!(codes.contains(&"malformed_placeholder")); |
| 1027 | assert!(codes.contains(&"duplicate_step_label")); |
| 1028 | } |
| 1029 | |
| 1030 | #[test] |
| 1031 | fn program_catalog_try_register_rejects_invalid_template() { |
nothing calls this directly
no test coverage detected