pub mod builders;
pub mod isolation;
use crate::testing::mocks::{
MockClaudeClientBuilder, MockFileSystemBuilder, MockGitOperationsBuilder,
MockSubprocessManagerBuilder,
};
pub struct Fixtures;
impl Fixtures {
pub fn clean_git_repo() -> MockGitOperationsBuilder {
MockGitOperationsBuilder::new()
.is_repo(true)
.with_clean_status()
.with_commit_message("Initial commit")
}
pub fn dirty_git_repo() -> MockGitOperationsBuilder {
MockGitOperationsBuilder::new()
.is_repo(true)
.with_dirty_status(vec![
"M src/main.rs",
"A src/new_feature.rs",
"?? temp.txt",
])
.with_commit_message("Previous commit")
}
pub fn successful_claude() -> MockClaudeClientBuilder {
MockClaudeClientBuilder::new()
.with_success("/prodigy-code-review", "No issues found. Code looks good!")
.with_success(
"/prodigy-implement-spec",
"Specification implemented successfully",
)
.with_success("/prodigy-lint", "Linting completed. No issues found.")
}
pub fn rate_limited_claude() -> MockClaudeClientBuilder {
MockClaudeClientBuilder::new().with_error(
"/prodigy-code-review",
"Error: Rate limit exceeded. Please try again later.",
)
}
pub fn unavailable_claude() -> MockClaudeClientBuilder {
MockClaudeClientBuilder::new().unavailable()
}
pub fn git_subprocess() -> MockSubprocessManagerBuilder {
MockSubprocessManagerBuilder::new()
.with_success("git", "")
.with_success("cargo", "")
}
pub fn rust_project_fs() -> MockFileSystemBuilder {
MockFileSystemBuilder::new().with_project_structure()
}
pub fn complex_project_fs() -> MockFileSystemBuilder {
MockFileSystemBuilder::new()
.with_project_structure()
.with_directory("src/modules")
.with_file(
"src/modules/auth.rs",
"pub mod auth {\n // Authentication logic\n}",
)
.with_file(
"src/modules/database.rs",
"pub mod database {\n // Database logic\n}",
)
.with_directory("src/handlers")
.with_file(
"src/handlers/api.rs",
"pub mod api {\n // API handlers\n}",
)
.with_file(
"src/config.rs",
"pub struct Config {\n // Configuration\n}",
)
.with_file(
"tests/integration_test.rs",
"#[test]\nfn test_integration() {\n assert!(true);\n}",
)
}
}