@@ -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) ]
18871883async 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