use crate::brain::tools::Tool;
use crate::brain::tools::generate_image::GenerateImageTool;
use crate::config::{Config, ImageGenerationConfig, ProviderConfig, ProviderConfigs};
#[test]
fn from_config_returns_none_when_generation_disabled() {
let config = Config::default();
assert!(GenerateImageTool::from_config(&config).is_none());
}
#[test]
fn from_config_returns_none_when_no_api_key_and_no_override() {
let config = Config {
image: crate::config::ImageConfig {
generation: ImageGenerationConfig {
enabled: true,
model: "gemini-3.1-flash-image-preview".into(),
api_key: None,
},
..Default::default()
},
..Default::default()
};
assert!(GenerateImageTool::from_config(&config).is_none());
}
#[test]
fn from_config_falls_back_to_global_gemini_config() {
let config = Config {
image: crate::config::ImageConfig {
generation: ImageGenerationConfig {
enabled: true,
model: "gemini-3.1-flash-image-preview".into(),
api_key: Some("GOOGLE_KEY".into()),
},
..Default::default()
},
..Default::default()
};
let tool = GenerateImageTool::from_config(&config).expect("must build");
assert_eq!(tool.name(), "generate_image");
}
#[test]
fn from_config_picks_openai_backend_when_override_on_non_gemini_provider() {
let config = Config {
providers: ProviderConfigs {
openrouter: Some(ProviderConfig {
enabled: true,
api_key: Some("or-key".into()),
base_url: Some("https://openrouter.ai/api/v1/chat/completions".into()),
default_model: Some("anthropic/claude-sonnet-4.6".into()),
generation_model: Some("black-forest-labs/flux-1.1-pro".into()),
..Default::default()
}),
..Default::default()
},
image: crate::config::ImageConfig {
generation: ImageGenerationConfig {
enabled: true,
model: "gemini-3.1-flash-image-preview".into(),
api_key: Some("GOOGLE_KEY".into()),
},
..Default::default()
},
..Default::default()
};
let tool = GenerateImageTool::from_config(&config).expect("must build");
assert_eq!(tool.name(), "generate_image");
}
#[test]
fn from_config_picks_gemini_backend_when_override_is_gemini_host() {
let config = Config {
providers: ProviderConfigs {
gemini: Some(ProviderConfig {
enabled: true,
api_key: Some("gemini-key".into()),
base_url: Some("https://generativelanguage.googleapis.com/v1beta".into()),
default_model: Some("gemini-3.6-flash".into()),
generation_model: Some("imagen-4.0-generate-001".into()),
..Default::default()
}),
..Default::default()
},
image: crate::config::ImageConfig {
generation: ImageGenerationConfig {
enabled: true,
model: "gemini-3.1-flash-image-preview".into(),
api_key: Some("GOOGLE_KEY".into()),
},
..Default::default()
},
..Default::default()
};
let tool = GenerateImageTool::from_config(&config).expect("must build");
assert_eq!(tool.name(), "generate_image");
}