refactor: modularize codebase and add 404 unit tests (#13)
All checks were successful
CI / Format (push) Successful in 4s
CI / Clippy (push) Successful in 4m19s
CI / Security Audit (push) Successful in 1m44s
CI / Detect Changes (push) Successful in 5s
CI / Tests (push) Successful in 5m15s
CI / Deploy Agent (push) Successful in 2s
CI / Deploy Dashboard (push) Successful in 2s
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Successful in 2s
All checks were successful
CI / Format (push) Successful in 4s
CI / Clippy (push) Successful in 4m19s
CI / Security Audit (push) Successful in 1m44s
CI / Detect Changes (push) Successful in 5s
CI / Tests (push) Successful in 5m15s
CI / Deploy Agent (push) Successful in 2s
CI / Deploy Dashboard (push) Successful in 2s
CI / Deploy Docs (push) Has been skipped
CI / Deploy MCP (push) Successful in 2s
This commit was merged in pull request #13.
This commit is contained in:
@@ -129,3 +129,110 @@ struct GitleaksResult {
|
||||
#[serde(rename = "Match")]
|
||||
r#match: String,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
// --- is_allowlisted tests ---
|
||||
|
||||
#[test]
|
||||
fn allowlisted_env_example_files() {
|
||||
assert!(is_allowlisted(".env.example"));
|
||||
assert!(is_allowlisted("config/.env.sample"));
|
||||
assert!(is_allowlisted("deploy/.ENV.TEMPLATE"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn allowlisted_test_directories() {
|
||||
assert!(is_allowlisted("src/test/config.json"));
|
||||
assert!(is_allowlisted("src/tests/fixtures.rs"));
|
||||
assert!(is_allowlisted("data/fixtures/secret.txt"));
|
||||
assert!(is_allowlisted("pkg/testdata/key.pem"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn allowlisted_mock_files() {
|
||||
assert!(is_allowlisted("src/mock_service.py"));
|
||||
assert!(is_allowlisted("lib/MockAuth.java"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn allowlisted_test_suffixes() {
|
||||
assert!(is_allowlisted("auth_test.go"));
|
||||
assert!(is_allowlisted("auth.test.ts"));
|
||||
assert!(is_allowlisted("auth.test.js"));
|
||||
assert!(is_allowlisted("auth.spec.ts"));
|
||||
assert!(is_allowlisted("auth.spec.js"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn not_allowlisted_regular_files() {
|
||||
assert!(!is_allowlisted("src/main.rs"));
|
||||
assert!(!is_allowlisted("config/.env"));
|
||||
assert!(!is_allowlisted("lib/auth.ts"));
|
||||
assert!(!is_allowlisted("deploy/secrets.yaml"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn not_allowlisted_partial_matches() {
|
||||
// "test" as substring in a non-directory context should not match
|
||||
assert!(!is_allowlisted("src/attestation.rs"));
|
||||
assert!(!is_allowlisted("src/contest/data.json"));
|
||||
}
|
||||
|
||||
// --- GitleaksResult deserialization tests ---
|
||||
|
||||
#[test]
|
||||
fn deserialize_gitleaks_result() {
|
||||
let json = r#"{
|
||||
"Description": "AWS Access Key",
|
||||
"RuleID": "aws-access-key",
|
||||
"File": "src/config.rs",
|
||||
"StartLine": 10,
|
||||
"Match": "AKIAIOSFODNN7EXAMPLE"
|
||||
}"#;
|
||||
let result: GitleaksResult = serde_json::from_str(json).unwrap();
|
||||
assert_eq!(result.description, "AWS Access Key");
|
||||
assert_eq!(result.rule_id, "aws-access-key");
|
||||
assert_eq!(result.file, "src/config.rs");
|
||||
assert_eq!(result.start_line, 10);
|
||||
assert_eq!(result.r#match, "AKIAIOSFODNN7EXAMPLE");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize_gitleaks_result_array() {
|
||||
let json = r#"[
|
||||
{
|
||||
"Description": "Generic Secret",
|
||||
"RuleID": "generic-secret",
|
||||
"File": "app.py",
|
||||
"StartLine": 5,
|
||||
"Match": "password=hunter2"
|
||||
}
|
||||
]"#;
|
||||
let results: Vec<GitleaksResult> = serde_json::from_str(json).unwrap();
|
||||
assert_eq!(results.len(), 1);
|
||||
assert_eq!(results[0].rule_id, "generic-secret");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn severity_mapping_private_key() {
|
||||
// Verify the severity logic from the scan method
|
||||
let rule_id = "some-private-key-rule";
|
||||
assert!(rule_id.contains("private-key"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn severity_mapping_token_password_secret() {
|
||||
for keyword in &["token", "password", "secret"] {
|
||||
let rule_id = format!("some-{}-rule", keyword);
|
||||
assert!(
|
||||
rule_id.contains("token")
|
||||
|| rule_id.contains("password")
|
||||
|| rule_id.contains("secret"),
|
||||
"Expected '{rule_id}' to match token/password/secret"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user