catalyst 0.2.9

A lightweight API testing tool
Documentation
#[cfg(test)]
mod tests {
    use catalyst::utils::string::replace_variables;
    use std::{collections::HashMap, env};

    fn with_env_var<F>(key: &str, value: &str, test: F)
    where
        F: FnOnce() + std::panic::UnwindSafe,
    {
        unsafe {
            env::set_var(key, value);
            let _ = std::panic::catch_unwind(test);
            env::remove_var(key);
        }
    }

    #[test]
    fn test_replace_variables_single() {
        let mut variables = HashMap::new();
        variables.insert("name".to_string(), "John".to_string());
        let result = replace_variables("Hello {{name}}!", &variables);
        assert_eq!(result, "Hello John!");
    }

    #[test]
    fn test_replace_variables_multiple() {
        let mut variables = HashMap::new();
        variables.insert("name".to_string(), "John".to_string());
        variables.insert("age".to_string(), "30".to_string());
        let result = replace_variables("{{name}} is {{age}} years old.", &variables);
        assert_eq!(result, "John is 30 years old.");
    }

    #[test]
    fn test_replace_variables_no_match() {
        let mut variables = HashMap::new();
        variables.insert("name".to_string(), "John".to_string());
        let result = replace_variables("Hello world!", &variables);
        assert_eq!(result, "Hello world!");
    }

    #[test]
    fn test_replace_variables_partial_match() {
        let mut variables = HashMap::new();
        variables.insert("name".to_string(), "John".to_string());
        let result = replace_variables("Hello {{name}}, welcome to {{city}}!", &variables);
        assert_eq!(result, "Hello John, welcome to {{city}}!");
    }

    #[test]
    fn test_replace_env_var() {
        with_env_var("TEST_USER", "Alice", || {
            let variables = HashMap::new();
            let result = replace_variables("Hello ${{TEST_USER}}!", &variables);
            assert_eq!(result, "Hello Alice!");
        });
    }

    #[test]
    fn test_replace_env_and_test_vars() {
        with_env_var("API_KEY", "secret123", || {
            let mut variables = HashMap::new();
            variables.insert("username".to_string(), "john_doe".to_string());

            let result =
                replace_variables("Auth: Bearer ${{API_KEY}}, User: {{username}}", &variables);
            assert_eq!(result, "Auth: Bearer secret123, User: john_doe");
        });
    }

    #[test]
    fn test_replace_variables_json() {
        with_env_var("TOKEN", "xyz789", || {
            let mut variables = HashMap::new();
            variables.insert("user_id".to_string(), "42".to_string());

            let result = replace_variables(
                r#"{
                    "authorization": "Bearer ${{TOKEN}}",
                    "user": {
                        "id": {{user_id}}
                    }
                }"#,
                &variables,
            );

            assert_eq!(
                result.replace([' ', '\n'], ""),
                r#"{"authorization":"Bearer xyz789","user":{"id":42}}"#
            );
        });
    }
}