Initial commit: env-guard CLI tool with CI/CD
Some checks failed
CI / test (push) Failing after 9s
CI / binary (push) Has been skipped
CI / release (push) Has been skipped

This commit is contained in:
CI Bot
2026-02-06 10:01:25 +00:00
commit fc90e05ebb
18 changed files with 2670 additions and 0 deletions

139
tests/validation_test.rs Normal file
View File

@@ -0,0 +1,139 @@
#[cfg(test)]
mod validation_tests {
use env_guard::validation::{
validate_url, validate_email, validate_uuid, validate_api_key,
validate_boolean, validate_integer, validate_database_url, validate_jwt,
validate_aws_key, validate_github_token, validate_slack_webhook,
validate_value, ValidationError, ValidationType, Validator
};
#[test]
fn test_valid_urls() {
assert!(validate_url("https://example.com"));
assert!(validate_url("http://localhost:3000"));
assert!(validate_url("https://api.example.com/v1/users"));
}
#[test]
fn test_invalid_urls() {
assert!(!validate_url("not-a-url"));
assert!(!validate_url("ftp://invalid.com"));
assert!(!validate_url(""));
}
#[test]
fn test_valid_emails() {
assert!(validate_email("user@example.com"));
assert!(validate_email("test.user+tag@domain.co.uk"));
assert!(validate_email("admin@sub.domain.com"));
}
#[test]
fn test_invalid_emails() {
assert!(!validate_email("not-an-email"));
assert!(!validate_email("@nodomain.com"));
assert!(!validate_email(""));
}
#[test]
fn test_valid_uuids() {
assert!(validate_uuid("550e8400-e29b-41d4-a716-446655440000"));
assert!(validate_uuid("f47ac10b-58cc-4372-a567-0e02b2c3d479"));
}
#[test]
fn test_invalid_uuids() {
assert!(!validate_uuid("not-a-uuid"));
assert!(!validate_uuid(""));
}
#[test]
fn test_valid_api_keys() {
assert!(validate_api_key("sk-test123456789012345678901234"));
assert!(validate_api_key("pk_live_abcdefghijklmnopqrstuvwx"));
}
#[test]
fn test_invalid_api_keys() {
assert!(!validate_api_key("too-short"));
assert!(!validate_api_key(""));
}
#[test]
fn test_valid_booleans() {
assert!(validate_boolean("true"));
assert!(validate_boolean("false"));
assert!(validate_boolean("1"));
assert!(validate_boolean("0"));
}
#[test]
fn test_invalid_booleans() {
assert!(!validate_boolean("maybe"));
assert!(!validate_boolean("2"));
assert!(!validate_boolean(""));
}
#[test]
fn test_valid_integers() {
assert!(validate_integer("123"));
assert!(validate_integer("-456"));
assert!(validate_integer("0"));
}
#[test]
fn test_invalid_integers() {
assert!(!validate_integer("12.34"));
assert!(!validate_integer("abc"));
assert!(!validate_integer(""));
}
#[test]
fn test_valid_database_urls() {
assert!(validate_database_url("postgresql://user:pass@localhost:5432/db"));
assert!(validate_database_url("mysql://user:pass@localhost:3306/db"));
assert!(validate_database_url("mongodb://localhost:27017/db"));
assert!(validate_database_url("redis://localhost:6379"));
}
#[test]
fn test_invalid_database_urls() {
assert!(!validate_database_url("not-a-db-url"));
assert!(!validate_database_url(""));
}
#[test]
fn test_valid_jwts() {
assert!(validate_jwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"));
}
#[test]
fn test_invalid_jwts() {
assert!(!validate_jwt("not-a-jwt"));
assert!(!validate_jwt(""));
}
#[test]
fn test_valid_github_tokens() {
assert!(validate_github_token("ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
}
#[test]
fn test_valid_slack_webhooks() {
assert!(validate_slack_webhook("https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"));
}
#[test]
fn test_validate_value() {
assert!(validate_value("TEST", "value", None).is_ok());
assert!(validate_value("TEST", "", None).is_err());
}
#[test]
fn test_validator_with_builtin_rules() {
let validator = Validator::with_builtin_rules();
let result = validator.validate_all(&std::collections::HashMap::new());
assert!(result.failed.is_empty());
assert!(result.passed.is_empty());
}
}