mirror of
https://github.com/bahdotsh/wrkflw.git
synced 2025-12-16 19:57:44 +01:00
65 lines
1.6 KiB
Rust
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")));
|
|
}
|