pub const PR_EVAL_TEMPLATE: &str = include_str!("templates/pr-eval.yml");
pub const NIGHTLY_EVAL_TEMPLATE: &str = include_str!("templates/nightly-eval.yml");
pub const RELEASE_EVAL_TEMPLATE: &str = include_str!("templates/release-eval.yml");
pub const PRE_COMMIT_TEMPLATE: &str = include_str!("templates/pre-commit-hook.yml");
pub const TEMPLATES: &[(&str, &str)] = &[
("pr-eval.yml", PR_EVAL_TEMPLATE),
("nightly-eval.yml", NIGHTLY_EVAL_TEMPLATE),
("release-eval.yml", RELEASE_EVAL_TEMPLATE),
("pre-commit-hook.yml", PRE_COMMIT_TEMPLATE),
];
#[cfg(test)]
mod tests {
use super::*;
use serde_yaml::Value;
#[test]
fn every_template_is_non_empty() {
for (name, body) in TEMPLATES {
assert!(!body.is_empty(), "template {name} is empty");
}
}
#[test]
fn every_template_parses_as_yaml() {
for (name, body) in TEMPLATES {
let parsed: Value = serde_yaml::from_str(body)
.unwrap_or_else(|err| panic!("{name} is invalid YAML: {err}"));
assert!(
parsed.is_mapping(),
"template {name} should parse to a YAML mapping"
);
}
}
#[test]
fn pr_template_references_subcommands() {
assert!(PR_EVAL_TEMPLATE.contains("swink-eval run"));
assert!(PR_EVAL_TEMPLATE.contains("swink-eval gate"));
}
}