dev_scope/shared/models/internal/
report_definition.rs1use 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}