use anyhow::Result;
use std::fs;
use std::path::Path;
pub fn execute(fixture: Option<&str>) -> Result<()> {
println!("๐งช Updating test fixtures...");
println!();
let fixtures = match fixture {
Some(name) => vec![name],
None => vec![
"project_design",
"environment",
"claude_context",
"version_manifest",
],
};
for fixture_name in fixtures {
update_fixture(fixture_name)?;
}
println!();
println!("โ
Fixtures updated!");
println!();
println!("Next steps:");
println!("1. Run tests: cargo test");
println!("2. Verify fixtures are correct");
println!("3. Commit if satisfied");
Ok(())
}
fn update_fixture(name: &str) -> Result<()> {
println!("๐ Updating {} fixture...", name);
match name {
"project_design" => update_project_design_fixture()?,
"environment" => update_environment_fixture()?,
"claude_context" => update_claude_context_fixture()?,
"version_manifest" => update_version_manifest_fixture()?,
_ => {
println!(" โ Unknown fixture: {}", name);
}
}
Ok(())
}
fn update_project_design_fixture() -> Result<()> {
let fixture_path = "tests/fixtures/PROJECT_DESIGN.toml";
fs::create_dir_all("tests/fixtures")?;
if Path::new("PROJECT_DESIGN.toml").exists() {
let content = fs::read_to_string("PROJECT_DESIGN.toml")?;
fs::write(fixture_path, content)?;
println!(" โ Updated from current PROJECT_DESIGN.toml");
} else {
println!(" โ ๏ธ No PROJECT_DESIGN.toml found");
}
Ok(())
}
fn update_environment_fixture() -> Result<()> {
let fixture_path = "tests/fixtures/environment.json";
let env_fixture = serde_json::json!({
"os": "macos",
"arch": "aarch64",
"tools": {
"cargo": {
"available": true,
"version": "1.88.0"
},
"docker": {
"available": true,
"version": "28.3.0"
},
"git": {
"available": true,
"version": "2.39.5"
}
},
"languages": {
"rust": {
"available": true,
"version": "1.88.0"
}
}
});
fs::create_dir_all("tests/fixtures")?;
fs::write(fixture_path, serde_json::to_string_pretty(&env_fixture)?)?;
println!(" โ Created sample environment fixture");
Ok(())
}
fn update_claude_context_fixture() -> Result<()> {
let fixture_path = "tests/fixtures/CLAUDE.md";
let claude_fixture = r#"# patina - Claude Context
This is a test fixture for CLAUDE.md generation.
## Environment
- OS: macos
- Rust: 1.88.0
## Project Design
Test project for Patina development.
## Patterns
- Core patterns loaded
- Topic patterns available
"#;
fs::create_dir_all("tests/fixtures")?;
fs::write(fixture_path, claude_fixture)?;
println!(" โ Created sample CLAUDE.md fixture");
Ok(())
}
fn update_version_manifest_fixture() -> Result<()> {
let fixture_path = "tests/fixtures/version_manifest.json";
let manifest_fixture = serde_json::json!({
"patina": "0.1.0",
"components": {
"claude-adapter": "0.6.0",
"gemini-adapter": "0.1.0",
"openai-adapter": "0.1.0",
"docker-templates": "0.1.0"
},
"updated": "2025-08-06T00:00:00Z"
});
fs::create_dir_all("tests/fixtures")?;
fs::write(
fixture_path,
serde_json::to_string_pretty(&manifest_fixture)?,
)?;
println!(" โ Created sample version manifest fixture");
Ok(())
}