use std::path::PathBuf;
#[cfg(feature = "daemon")]
use codenexus::kit::DaemonModule;
#[cfg(feature = "embed")]
use codenexus::kit::EmbedModule;
use codenexus::kit::{
build_kit, ExtractorRegistryModule, IndexerModule, KitBootstrapConfig, ParserFactoryModule,
QueryModule, ResolverModule, StorageModule, TraceModule,
};
fn memory_db_path() -> PathBuf {
PathBuf::from(":memory:")
}
#[tokio::test]
async fn all_core_capabilities_resolvable_through_kit() {
let config = KitBootstrapConfig::new(memory_db_path());
let kit = build_kit(&config).await.expect("build_kit");
kit.require::<StorageModule>().expect("require_storage");
kit.require::<ParserFactoryModule>()
.expect("require_parser");
kit.require::<ExtractorRegistryModule>()
.expect("require_extractor");
kit.require::<IndexerModule>().expect("require_indexer");
kit.require::<ResolverModule>().expect("require_resolver");
kit.require::<QueryModule>().expect("require_query");
kit.require::<TraceModule>().expect("require_trace");
}
#[cfg(feature = "daemon")]
#[tokio::test]
async fn daemon_capability_resolvable_when_feature_on() {
let config = KitBootstrapConfig::new(memory_db_path());
let kit = build_kit(&config).await.expect("build_kit");
kit.require::<DaemonModule>().expect("require_daemon");
}
#[cfg(feature = "embed")]
#[tokio::test]
async fn embed_capability_resolvable_when_feature_on() {
let config = KitBootstrapConfig::new(memory_db_path());
let kit = build_kit(&config).await.expect("build_kit");
kit.require::<EmbedModule>().expect("require_embed");
}
#[tokio::test]
async fn storage_capability_is_functional() {
let config = KitBootstrapConfig::new(memory_db_path());
let kit = build_kit(&config).await.expect("build_kit");
let storage = kit.require::<StorageModule>().expect("require_storage");
let projects = storage.list_projects().expect("list_projects");
assert!(
projects.is_empty(),
"fresh Kit should have no projects, got {projects:?}"
);
}