@@ -2100,4 +2100,59 @@ mod tests {
2100
2100
Ok ( ( ) )
2101
2101
} ) ;
2102
2102
}
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
+ }
2103
2158
}
0 commit comments