use crate::error::Result;
use tracing::instrument;
impl super::ToolingClient {
#[cfg(feature = "dependencies")]
#[instrument(skip(self))]
pub async fn get_metadata_component_dependencies(
&self,
where_clause: Option<&str>,
) -> Result<Vec<crate::types::MetadataComponentDependency>> {
let base_query = "SELECT MetadataComponentId, MetadataComponentName, MetadataComponentNamespace, MetadataComponentType, RefMetadataComponentId, RefMetadataComponentName, RefMetadataComponentNamespace, RefMetadataComponentType FROM MetadataComponentDependency";
let query = if let Some(filter) = where_clause {
format!("{} WHERE {}", base_query, filter)
} else {
base_query.to_string()
};
self.query_all(&query).await
}
}
#[cfg(test)]
#[cfg(feature = "dependencies")]
mod tests {
#[test]
fn test_metadata_component_dependency_query_construction_no_filter() {
let base_query = "SELECT MetadataComponentId, MetadataComponentName, MetadataComponentNamespace, MetadataComponentType, RefMetadataComponentId, RefMetadataComponentName, RefMetadataComponentNamespace, RefMetadataComponentType FROM MetadataComponentDependency";
let query = base_query.to_string();
assert_eq!(query, base_query);
assert!(query.contains("MetadataComponentId"));
assert!(query.contains("RefMetadataComponentId"));
assert!(!query.contains("WHERE"));
}
#[test]
fn test_metadata_component_dependency_query_construction_with_filter() {
let base_query = "SELECT MetadataComponentId, MetadataComponentName, MetadataComponentNamespace, MetadataComponentType, RefMetadataComponentId, RefMetadataComponentName, RefMetadataComponentNamespace, RefMetadataComponentType FROM MetadataComponentDependency";
let filter = "MetadataComponentType = 'ApexClass'";
let query = format!("{} WHERE {}", base_query, filter);
assert!(query.contains("WHERE MetadataComponentType = 'ApexClass'"));
assert!(query.contains("MetadataComponentId"));
assert!(query.contains("RefMetadataComponentId"));
}
}