From 43f639f074a1b83d78cb0e3f529e4fb7ecc867ac Mon Sep 17 00:00:00 2001 From: Helio Frota <00hf11@gmail.com> Date: Wed, 10 Jun 2026 10:12:24 -0300 Subject: [PATCH] test: some basic vibe coded tests to increase cov The idea is to have some initial diff on codecov to check if everything is ok. --- src/scenario/mod.rs | 37 ++++++++++++++++ src/scenario/purl.rs | 100 +++++++++++++++++++++++++++++++++++++++++++ src/utils.rs | 26 +++++++++++ 3 files changed, 163 insertions(+) diff --git a/src/scenario/mod.rs b/src/scenario/mod.rs index a7e5a71..b84cc63 100644 --- a/src/scenario/mod.rs +++ b/src/scenario/mod.rs @@ -539,4 +539,41 @@ mod test { let _ = serde_json5::from_str::(include_str!("../../empty.json5")) .expect("Must be ok"); } + + #[test] + fn full_scenario_roundtrip() { + let json = r#"{ + "get_sbom": "sha256:abc", + "get_sbom_advisories": "sha256:abc", + "get_sbom_packages": "urn:uuid:abc", + "get_sbom_related": "urn:uuid:abc", + "get_vulnerability": "CVE-2024-1234", + "sbom_by_package": "pkg:rpm/redhat/openssl@3.0.0", + "sbom_license_ids": "urn:uuid:abc", + "analyze_purl": "pkg:rpm/redhat/curl@7.0.0", + "get_purl_details": "some-id", + "get_recommendations": ["pkg:rpm/redhat/a@1", "pkg:rpm/redhat/b@2"], + "delete_sbom_pool": ["urn:uuid:del1", "urn:uuid:del2"], + "download_advisory": "adv-123", + "get_advisory": "adv-123", + "download_sbom": "sha256:abc", + "get_sbom_license_export": "urn:uuid:abc", + "count_sbom_by_package": "pkg:rpm/redhat/openssl@3.0.0", + "get_sbom_group": "group-uuid", + "get_product": "prod-uuid", + "get_organization": "org-uuid", + "get_base_purl": "pkg:rpm/redhat/openssl", + "get_analysis_component": "sha256:abc", + "render_sbom_graph": "urn:uuid:abc", + "get_importer": "my-importer", + "get_weakness": "CWE-79", + "get_spdx_license": "MIT" + }"#; + + let scenario: super::Scenario = serde_json::from_str(json).expect("Must deserialize"); + let back = serde_json::to_string_pretty(&scenario).expect("Must serialize"); + let scenario2: super::Scenario = + serde_json::from_str(&back).expect("Must deserialize again"); + assert_eq!(scenario, scenario2); + } } diff --git a/src/scenario/purl.rs b/src/scenario/purl.rs index 38ca393..83e9874 100644 --- a/src/scenario/purl.rs +++ b/src/scenario/purl.rs @@ -30,3 +30,103 @@ impl Display for CanonicalPurl { Display::fmt(&purl, f) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn display_full() { + let purl = CanonicalPurl { + ty: "rpm".into(), + namespace: Some("redhat".into()), + name: "openssl".into(), + version: Some("3.0.0".into()), + qualifiers: BTreeMap::new(), + }; + assert_eq!(purl.to_string(), "pkg:rpm/redhat/openssl@3.0.0"); + } + + #[test] + fn display_no_namespace() { + let purl = CanonicalPurl { + ty: "rpm".into(), + namespace: None, + name: "openssl".into(), + version: Some("3.0.0".into()), + qualifiers: BTreeMap::new(), + }; + assert_eq!(purl.to_string(), "pkg:rpm/openssl@3.0.0"); + } + + #[test] + fn display_no_version() { + let purl = CanonicalPurl { + ty: "rpm".into(), + namespace: Some("redhat".into()), + name: "openssl".into(), + version: None, + qualifiers: BTreeMap::new(), + }; + assert_eq!(purl.to_string(), "pkg:rpm/redhat/openssl"); + } + + #[test] + fn display_minimal() { + let purl = CanonicalPurl { + ty: "generic".into(), + namespace: None, + name: "foo".into(), + version: None, + qualifiers: BTreeMap::new(), + }; + assert_eq!(purl.to_string(), "pkg:generic/foo"); + } + + #[test] + fn display_with_qualifiers() { + let mut qualifiers = BTreeMap::new(); + qualifiers.insert("arch".into(), "x86_64".into()); + qualifiers.insert("distro".into(), "rhel".into()); + let purl = CanonicalPurl { + ty: "rpm".into(), + namespace: Some("redhat".into()), + name: "openssl".into(), + version: Some("3.0.0".into()), + qualifiers, + }; + let s = purl.to_string(); + assert!(s.starts_with("pkg:rpm/redhat/openssl@3.0.0")); + assert!(s.contains("arch=x86_64")); + assert!(s.contains("distro=rhel")); + } + + #[test] + fn display_empty_qualifiers() { + let purl = CanonicalPurl { + ty: "maven".into(), + namespace: Some("com.fasterxml.jackson.core".into()), + name: "jackson-databind".into(), + version: Some("2.13.0".into()), + qualifiers: BTreeMap::new(), + }; + assert_eq!( + purl.to_string(), + "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.13.0" + ); + } + + #[test] + fn serde_roundtrip() { + let purl = CanonicalPurl { + ty: "rpm".into(), + namespace: Some("redhat".into()), + name: "openssl".into(), + version: Some("3.0.0".into()), + qualifiers: BTreeMap::new(), + }; + let json = serde_json::to_string(&purl).unwrap(); + let back: CanonicalPurl = serde_json::from_str(&json).unwrap(); + assert_eq!(purl, back); + } +} diff --git a/src/utils.rs b/src/utils.rs index 349aa7a..8c1f233 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -43,4 +43,30 @@ mod test { assert_eq!("012…5678", truncate_middle("012345678", 8),); assert_eq!("012…5678", truncate_middle("012345678012345678", 8)); } + + #[test] + fn display_vec_single() { + let v = DisplayVec(vec!["only"]); + assert_eq!(v.to_string(), "only"); + } + + #[test] + fn display_vec_empty() { + let v: DisplayVec = DisplayVec(vec![]); + assert_eq!(v.to_string(), ""); + } + + #[test] + fn display_vec_integers() { + let v = DisplayVec(vec![1, 2, 3]); + assert_eq!(v.to_string(), "1,2,3"); + } + + #[test] + fn display_vec_serde_roundtrip() { + let v: DisplayVec = DisplayVec(vec!["x".into(), "y".into()]); + let json = serde_json::to_string(&v).unwrap(); + let back: DisplayVec = serde_json::from_str(&json).unwrap(); + assert_eq!(v, back); + } }