@@ -496,6 +496,7 @@ pub(crate) async fn get_all_platforms(
496496 Extension ( pool) : Extension < Pool > ,
497497 uri : Uri ,
498498) -> AxumResult < AxumResponse > {
499+ let is_crate_root = params. path . as_ref ( ) . map ( |path| path == "index.html" ) . unwrap_or ( true ) ;
499500 let req_path: String = params. path . unwrap_or_default ( ) ;
500501 let req_path: Vec < & str > = req_path. split ( '/' ) . collect ( ) ;
501502
@@ -618,7 +619,7 @@ pub(crate) async fn get_all_platforms(
618619 doc_targets,
619620 } ,
620621 inner_path,
621- use_direct_platform_links : true ,
622+ use_direct_platform_links : is_crate_root ,
622623 current_target,
623624 } ;
624625 Ok ( res. into_response ( ) )
@@ -1235,12 +1236,38 @@ mod tests {
12351236
12361237 #[ test]
12371238 fn platform_links_are_direct_and_without_nofollow ( ) {
1239+ fn check_links ( response_text : String , should_contain_redirect : bool ) {
1240+ let platform_links: Vec < ( String , String ) > = kuchikiki:: parse_html ( )
1241+ . one ( response_text)
1242+ . select ( r#"li a"# )
1243+ . expect ( "invalid selector" )
1244+ . map ( |el| {
1245+ let attributes = el. attributes . borrow ( ) ;
1246+ let url = attributes. get ( "href" ) . expect ( "href" ) . to_string ( ) ;
1247+ let rel = attributes. get ( "rel" ) . unwrap_or ( "" ) . to_string ( ) ;
1248+ ( url, rel)
1249+ } )
1250+ . collect ( ) ;
1251+
1252+ assert_eq ! ( platform_links. len( ) , 2 ) ;
1253+
1254+ for ( url, rel) in platform_links {
1255+ assert_eq ! ( url. contains( "/target-redirect/" ) , should_contain_redirect) ;
1256+ if !should_contain_redirect {
1257+ assert_eq ! ( rel, "" ) ;
1258+ } else {
1259+ assert_eq ! ( rel, "nofollow" ) ;
1260+ }
1261+ }
1262+ }
1263+
12381264 wrapper ( |env| {
12391265 env. fake_release ( )
12401266 . name ( "dummy" )
12411267 . version ( "0.4.0" )
12421268 . rustdoc_file ( "dummy/index.html" )
12431269 . rustdoc_file ( "x86_64-pc-windows-msvc/dummy/index.html" )
1270+ . rustdoc_file ( "x86_64-pc-windows-msvc/dummy/struct.A.html" )
12441271 . default_target ( "x86_64-unknown-linux-gnu" )
12451272 . add_target ( "x86_64-pc-windows-msvc" )
12461273 . create ( ) ?;
@@ -1250,25 +1277,14 @@ mod tests {
12501277 . get ( "/-/menus/platforms/dummy/0.4.0/x86_64-pc-windows-msvc" )
12511278 . send ( ) ?;
12521279 assert ! ( response. status( ) . is_success( ) ) ;
1280+ check_links ( response. text ( ) ?, false ) ;
12531281
1254- let platform_links: Vec < ( String , String ) > = kuchikiki:: parse_html ( )
1255- . one ( response. text ( ) ?)
1256- . select ( r#"li a"# )
1257- . expect ( "invalid selector" )
1258- . map ( |el| {
1259- let attributes = el. attributes . borrow ( ) ;
1260- let url = attributes. get ( "href" ) . expect ( "href" ) . to_string ( ) ;
1261- let rel = attributes. get ( "rel" ) . unwrap_or ( "" ) . to_string ( ) ;
1262- ( url, rel)
1263- } )
1264- . collect ( ) ;
1265-
1266- assert_eq ! ( platform_links. len( ) , 2 ) ;
1267-
1268- for ( url, rel) in platform_links {
1269- assert ! ( !url. contains( "/target-redirect/" ) ) ;
1270- assert_eq ! ( rel, "" ) ;
1271- }
1282+ let response = env
1283+ . frontend ( )
1284+ . get ( "/-/menus/platforms/dummy/0.4.0/x86_64-pc-windows-msvc/struct.A.html" )
1285+ . send ( ) ?;
1286+ assert ! ( response. status( ) . is_success( ) ) ;
1287+ check_links ( response. text ( ) ?, true ) ;
12721288
12731289 Ok ( ( ) )
12741290 } ) ;
0 commit comments