Skip to main content

busbar_sf_tooling/client/
coverage.rs

1use tracing::instrument;
2
3use crate::error::Result;
4use crate::types::ApexCodeCoverageAggregate;
5
6impl super::ToolingClient {
7    /// Get code coverage for all Apex classes and triggers.
8    #[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    /// Get overall org-wide code coverage percentage.
16    #[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}