Skip to content

Commit 82a7f63

Browse files
committed
Add more tests per review
1 parent 9278a1b commit 82a7f63

File tree

1 file changed

+43
-30
lines changed
  • modules/fundamental/src/sbom/endpoints

1 file changed

+43
-30
lines changed

modules/fundamental/src/sbom/endpoints/test.rs

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1860,48 +1860,61 @@ async fn query_aibom_models(
18601860

18611861
#[test_context(TrustifyContext)]
18621862
#[rstest]
1863-
#[case("hugging", 2)]
1864-
#[case("granite", 1)]
1865-
#[case("pkg:huggingface/ibm-granite", 1)]
1866-
#[case("pkg:huggingface/ibm-granite/granite-docling-258M", 1)]
1867-
#[case("pkg:huggingface/ibm-granite/granite-docling-258M@1.0", 1)]
1868-
#[case("purl=pkg:huggingface/ibm-granite/granite-docling-258M@1.0", 1)]
1869-
#[case("purl~granite", 1)]
1870-
#[case("purl:namespace=ibm-granite&purl:version=1.0&purl:type=huggingface", 1)]
1871-
#[case("name~granite", 1)]
1872-
#[case("name=granite-docling-258M", 1)]
1873-
#[case("properties:typeOfModel=idefics3", 1)]
1874-
#[case(
1875-
"properties:typeOfModel=idefics3&properties:primaryPurpose=image-text-to-text",
1876-
1
1877-
)]
1878-
#[case("purl:type=boatymcboatface", 1)]
1879-
// negative / no-match queries
1880-
#[case("name=non-existent-model-name", 0)]
1881-
#[case("purl:type=does-not-exist", 0)]
1882-
#[case(
1883-
"properties:typeOfModel=idefics3&properties:primaryPurpose=text-to-image",
1884-
0
1885-
)]
1863+
#[case(None, &["canary-1b-v2", "granite-docling-258M"])]
1864+
#[case(Some(""), &["canary-1b-v2", "granite-docling-258M"])]
1865+
#[case(Some("thesearenotthedroidsyouarelookingfor"), &[])]
1866+
#[case(Some("hugging"), &["canary-1b-v2", "granite-docling-258M"])]
1867+
#[case(Some("granite"), &["granite-docling-258M"])]
1868+
#[case(Some("pkg:huggingface/ibm-granite"), &["granite-docling-258M"])]
1869+
#[case(Some("pkg:huggingface/ibm-granite/granite-docling-258M"), &["granite-docling-258M"])]
1870+
#[case(Some("pkg:huggingface/ibm-granite/granite-docling-258M@1.0"), &["granite-docling-258M"])]
1871+
#[case(Some("purl=pkg:huggingface/ibm-granite/granite-docling-258M@1.0"), &["granite-docling-258M"])]
1872+
#[case(Some("purl~granite"), &["granite-docling-258M"])]
1873+
#[case(Some("purl:namespace=ibm-granite&purl:version=1.0&purl:type=huggingface"), &["granite-docling-258M"])]
1874+
#[case(Some("name~granite"), &["granite-docling-258M"])]
1875+
#[case(Some("name=granite-docling-258M"), &["granite-docling-258M"])]
1876+
#[case(Some("properties:typeOfModel=idefics3"), &["granite-docling-258M"])]
1877+
#[case(Some("properties:typeOfModel=idefics3&properties:primaryPurpose=image-text-to-text"), &["granite-docling-258M"])]
1878+
#[case(Some("purl:type=boatymcboatface"), &["granite-docling-258M"])]
1879+
#[case(Some("name=non-existent-model-name"), &[])]
1880+
#[case(Some("purl:type=does-not-exist"), &[])]
1881+
#[case(Some("properties:typeOfModel=idefics3&properties:primaryPurpose=text-to-image"), &[])]
18861882
#[test_log::test(actix_web::test)]
18871883
async fn query_all_aibom_models(
18881884
ctx: &TrustifyContext,
1889-
#[case] q: &str,
1890-
#[case] count: i64,
1885+
#[case] q: Option<&str>,
1886+
#[case] names: &[&str],
18911887
) -> Result<(), anyhow::Error> {
1892-
let app = caller(ctx).await?;
1893-
18941888
ctx.ingest_documents([
18951889
"cyclonedx/ai/ibm-granite_granite-docling-258M_aibom.json",
18961890
"cyclonedx/ai/nvidia_canary-1b-v2_aibom.json",
18971891
])
18981892
.await?;
18991893

1900-
let uri = format!("/api/v2/sbom/models?q={}", encode(q));
1894+
let uri = if let Some(q) = q {
1895+
format!("/api/v2/sbom/models?q={}", encode(q))
1896+
} else {
1897+
"/api/v2/sbom/models".into()
1898+
};
19011899
let req = TestRequest::get().uri(&uri).to_request();
1902-
let response: Value = app.call_and_read_body_json(req).await;
1900+
let app = caller(ctx).await?;
19031901

1904-
assert_eq!(response["total"].as_i64(), Some(count), "q: {q}");
1902+
#[derive(serde::Deserialize)]
1903+
struct Page<T> {
1904+
total: usize,
1905+
items: Vec<T>,
1906+
}
1907+
#[derive(serde::Deserialize)]
1908+
struct Summary {
1909+
name: String,
1910+
}
1911+
1912+
let response: Page<Summary> = app.call_and_read_body_json(req).await;
1913+
let mut v: Vec<_> = response.items.into_iter().map(|i| i.name).collect();
1914+
v.sort();
1915+
1916+
assert_eq!(response.total, names.len());
1917+
assert_eq!(v, names);
19051918

19061919
Ok(())
19071920
}

0 commit comments

Comments
 (0)