arcature-cli 2026.1.0

Developer lifecycle CLI for Arcature applications.
Documentation
//! `arc make test <name> --module <module>` — generate a test file.
//!
//! Creates `tests/<name>_test.rs` with a minimal test stub. The test file
//! lives outside `src/` (Rust integration test convention). The name is
//! snake_case (e.g. `links` -> `tests/links_test.rs`).

use std::path::Path;

use super::naming::{ensure_missing, snake_case, tests_file_path, validate_type_name};
use super::write::GeneratedFile;

pub(crate) fn generate(root: &Path, raw_name: &str) -> Result<GeneratedFile, String> {
    let name = validate_type_name(raw_name)?;
    let stem = format!("{}_test", snake_case(&name));
    let path = tests_file_path(root, &format!("{stem}.rs"))?;
    ensure_missing(&path)?;
    let content = render(&name);
    Ok(GeneratedFile { path, content })
}

fn render(name: &str) -> String {
    format!(
        "//! Integration test for `{name}`.\n\
         \n\
         #[test]\n\
         fn {snake}_smoke() {{\n\
         \x20   // Replace with a real test. Run with `cargo test --test {snake}_test`.\n\
         \x20   assert!(true);\n\
         }}\n",
        name = name,
        snake = snake_case(name),
    )
}