@@ -2100,4 +2100,59 @@ mod tests {
21002100 Ok ( ( ) )
21012101 } ) ;
21022102 }
2103+
2104+ #[ test]
2105+ fn crates_not_on_docsrs ( ) {
2106+ async_wrapper ( |env| async move {
2107+ let mut crates_io = mockito:: Server :: new_async ( ) . await ;
2108+ env. override_config ( |config| {
2109+ config. registry_api_host = crates_io. url ( ) . parse ( ) . unwrap ( ) ;
2110+ } ) ;
2111+
2112+ let web = env. web_app ( ) . await ;
2113+ env. async_fake_release ( )
2114+ . await
2115+ . name ( "some_random_crate" )
2116+ . create_async ( )
2117+ . await ?;
2118+
2119+ let _m = crates_io
2120+ . mock ( "GET" , "/api/v1/crates" )
2121+ . match_query ( Matcher :: AllOf ( vec ! [
2122+ Matcher :: UrlEncoded ( "q" . into( ) , "some_random_crate" . into( ) ) ,
2123+ Matcher :: UrlEncoded ( "per_page" . into( ) , "30" . into( ) ) ,
2124+ ] ) )
2125+ . with_status ( 200 )
2126+ . with_header ( "content-type" , "application/json" )
2127+ . with_body (
2128+ json ! ( {
2129+ "crates" : [
2130+ { "name" : "some_random_crate" } ,
2131+ { "name" : "some_random_crate2" } ,
2132+ { "name" : "some_random_crate3" } ,
2133+ ] ,
2134+ "meta" : {
2135+ "next_page" : "null" ,
2136+ "prev_page" : "null" ,
2137+ }
2138+ } )
2139+ . to_string ( ) ,
2140+ )
2141+ . create_async ( )
2142+ . await ;
2143+
2144+ let response = web. get ( "/releases/search?query=some_random_crate" ) . await ?;
2145+ assert ! ( response. status( ) . is_success( ) ) ;
2146+
2147+ let page = kuchikiki:: parse_html ( ) . one ( response. text ( ) . await ?) ;
2148+
2149+ assert_eq ! ( page. select( "div.name.not-available" ) . unwrap( ) . count( ) , 2 ) ;
2150+ assert_eq ! (
2151+ page. select( "div.name:not(.not-available)" ) . unwrap( ) . count( ) ,
2152+ 1
2153+ ) ;
2154+
2155+ Ok ( ( ) )
2156+ } )
2157+ }
21032158}
0 commit comments