busbar_sf_tooling/client/
coverage.rs1use tracing::instrument;
2
3use crate::error::Result;
4use crate::types::ApexCodeCoverageAggregate;
5
6impl super::ToolingClient {
7 #[instrument(skip(self))]
9 pub async fn get_code_coverage(&self) -> Result<Vec<ApexCodeCoverageAggregate>> {
10 self.query_all(
11 "SELECT Id, ApexClassOrTriggerId, ApexClassOrTrigger.Name, NumLinesCovered, NumLinesUncovered, Coverage FROM ApexCodeCoverageAggregate"
12 ).await
13 }
14
15 #[instrument(skip(self))]
17 pub async fn get_org_wide_coverage(&self) -> Result<f64> {
18 let coverage = self.get_code_coverage().await?;
19
20 let mut total_covered = 0i64;
21 let mut total_uncovered = 0i64;
22
23 for item in coverage {
24 total_covered += item.num_lines_covered as i64;
25 total_uncovered += item.num_lines_uncovered as i64;
26 }
27
28 let total_lines = total_covered + total_uncovered;
29 if total_lines == 0 {
30 return Ok(0.0);
31 }
32
33 Ok((total_covered as f64 / total_lines as f64) * 100.0)
34 }
35}