Files
wrkflw/tests/reusable_workflow_test.rs
2025-04-30 16:14:28 +05:30

65 lines
1.6 KiB
Rust

use std::fs;
use tempfile::tempdir;
use wrkflw::evaluator::evaluate_workflow_file;
#[test]
fn test_reusable_workflow_validation() {
let temp_dir = tempdir().unwrap();
let workflow_path = temp_dir.path().join("test-workflow.yml");
// Create a workflow file that uses reusable workflows
let content = r#"
on:
pull_request:
branches:
- main
jobs:
call-workflow-1-in-local-repo:
uses: octo-org/this-repo/.github/workflows/workflow-1.yml@172239021f7ba04fe7327647b213799853a9eb89
call-workflow-2-in-local-repo:
uses: ./path/to/workflow.yml
with:
username: mona
secrets:
token: ${{ secrets.TOKEN }}
"#;
fs::write(&workflow_path, content).unwrap();
// Validate the workflow
let result = evaluate_workflow_file(&workflow_path, false).unwrap();
// Should be valid since we've fixed the validation to handle reusable workflows
assert!(
result.is_valid,
"Workflow should be valid, but got issues: {:?}",
result.issues
);
assert!(result.issues.is_empty());
// Create an invalid reusable workflow (bad format for 'uses')
let invalid_content = r#"
on:
pull_request:
branches:
- main
jobs:
call-workflow-invalid:
uses: invalid-format
"#;
fs::write(&workflow_path, invalid_content).unwrap();
// Validate the workflow
let result = evaluate_workflow_file(&workflow_path, false).unwrap();
// Should be invalid due to the bad format
assert!(!result.is_valid);
assert!(result
.issues
.iter()
.any(|issue| issue.contains("Invalid reusable workflow reference format")));
}