use everruns_core::capabilities::{CapabilityRegistry, IntegrationPlugin};
use everruns_core::connector::ConnectorPlugin;
use everruns_core::deployment::DeploymentGrade;
use everruns_integrations_parallel as _;
#[test]
fn parallel_plugin_is_submitted() {
let plugins: Vec<&IntegrationPlugin> = inventory::iter::<IntegrationPlugin>().collect();
assert!(
plugins.iter().any(|p| {
let cap = (p.factory)();
cap.id() == "parallel_search"
}),
"Parallel IntegrationPlugin should be submitted via inventory"
);
}
#[test]
fn parallel_plugin_is_experimental() {
let plugins: Vec<&IntegrationPlugin> = inventory::iter::<IntegrationPlugin>().collect();
let plugin = plugins
.iter()
.find(|p| {
let cap = (p.factory)();
cap.id() == "parallel_search"
})
.expect("Parallel plugin not found");
assert!(plugin.experimental_only);
}
#[test]
fn parallel_registered_in_dev_registry() {
let registry = CapabilityRegistry::with_builtins_for_grade(DeploymentGrade::Dev);
assert!(registry.has("parallel_search"));
}
#[test]
fn parallel_not_registered_in_prod_registry() {
let registry = CapabilityRegistry::with_builtins_for_grade(DeploymentGrade::Prod);
assert!(!registry.has("parallel_search"));
}
static ENV_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
fn restore_env(key: &str, prev: Option<String>) {
match prev {
Some(value) => unsafe { std::env::set_var(key, value) },
None => unsafe { std::env::remove_var(key) },
}
}
#[test]
fn payments_plugin_is_flag_gated_not_experimental() {
let plugins: Vec<&IntegrationPlugin> = inventory::iter::<IntegrationPlugin>().collect();
let plugin = plugins
.iter()
.find(|p| (p.factory)().id() == "parallel")
.expect("Parallel payments plugin not found");
assert!(!plugin.experimental_only);
assert_eq!(plugin.feature_flag, Some("machine_payments"));
}
#[test]
fn payments_capability_disabled_by_default() {
let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
let prev = std::env::var("FEATURE_MACHINE_PAYMENTS").ok();
unsafe { std::env::remove_var("FEATURE_MACHINE_PAYMENTS") };
let registry = CapabilityRegistry::with_builtins_for_grade(DeploymentGrade::Dev);
assert!(!registry.has("parallel"));
restore_env("FEATURE_MACHINE_PAYMENTS", prev);
}
#[test]
fn payments_capability_enabled_by_flag() {
let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
let prev = std::env::var("FEATURE_MACHINE_PAYMENTS").ok();
unsafe { std::env::set_var("FEATURE_MACHINE_PAYMENTS", "true") };
let registry = CapabilityRegistry::with_builtins_for_grade(DeploymentGrade::Prod);
assert!(registry.has("parallel"));
restore_env("FEATURE_MACHINE_PAYMENTS", prev);
}
#[test]
fn connection_provider_is_submitted() {
let plugins: Vec<&ConnectorPlugin> = inventory::iter::<ConnectorPlugin>().collect();
assert!(
plugins.iter().any(|p| {
let provider = (p.factory)();
provider.provider_id() == "parallel"
}),
"Parallel ConnectorPlugin should be submitted via inventory"
);
}
#[test]
fn connection_provider_has_api_key_form() {
let plugins: Vec<&ConnectorPlugin> = inventory::iter::<ConnectorPlugin>().collect();
let plugin = plugins
.iter()
.find(|p| {
let provider = (p.factory)();
provider.provider_id() == "parallel"
})
.expect("Parallel connection plugin not found");
let provider = (plugin.factory)();
let schema = provider.form_schema().expect("should have form schema");
assert_eq!(schema.fields.len(), 1);
assert_eq!(schema.fields[0].name, "api_key");
}