dev_scope/shared/models/internal/
report_definition.rs

1use crate::models::prelude::{ModelMetadata, V1AlphaReportDefinition};
2use crate::models::HelpMetadata;
3use std::collections::BTreeMap;
4
5#[derive(Debug, PartialEq, Clone)]
6pub struct ReportDefinition {
7    pub full_name: String,
8    pub metadata: ModelMetadata,
9    pub additional_data: BTreeMap<String, String>,
10    pub template: String,
11}
12
13impl HelpMetadata for ReportDefinition {
14    fn metadata(&self) -> &ModelMetadata {
15        &self.metadata
16    }
17
18    fn full_name(&self) -> String {
19        self.full_name.to_string()
20    }
21}
22
23impl TryFrom<V1AlphaReportDefinition> for ReportDefinition {
24    type Error = anyhow::Error;
25
26    fn try_from(value: V1AlphaReportDefinition) -> Result<Self, Self::Error> {
27        Ok(ReportDefinition {
28            full_name: value.full_name(),
29            metadata: value.metadata,
30            template: value.spec.template.trim().to_string(),
31            additional_data: value.spec.additional_data,
32        })
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use crate::shared::models::parse_models_from_string;
39    use std::collections::BTreeMap;
40
41    use std::path::Path;
42
43    #[test]
44    fn test_parse_scope_report_def() {
45        let text = "
46---
47apiVersion: scope.github.com/v1alpha
48kind: ScopeReportDefinition
49metadata:
50  name: report
51spec:
52  additionalData:
53    env: env
54  template: |
55    hello bob
56 ";
57
58        let path = Path::new("/foo/bar/file.yaml");
59        let configs = parse_models_from_string(path, text).unwrap();
60        assert_eq!(1, configs.len());
61        let model = configs[0].get_report_def_spec().unwrap();
62
63        assert_eq!("ScopeReportDefinition/report", model.full_name);
64        assert_eq!("report", model.metadata.name());
65        assert_eq!(
66            "/foo/bar/file.yaml",
67            model.metadata.annotations.file_path.unwrap()
68        );
69        assert_eq!("hello bob", model.template);
70
71        let additional_data: BTreeMap<String, String> =
72            [("env".to_string(), "env".to_string())].into();
73        assert_eq!(additional_data, model.additional_data);
74    }
75}