@@ -469,7 +469,8 @@ pub(crate) async fn get_all_releases(
469
469
let row = sqlx:: query!(
470
470
"SELECT
471
471
crates.id AS crate_id,
472
- releases.doc_targets
472
+ releases.doc_targets,
473
+ releases.target_name
473
474
FROM crates
474
475
INNER JOIN releases on crates.id = releases.crate_id
475
476
WHERE crates.name = $1 and releases.version = $2;" ,
@@ -504,9 +505,9 @@ pub(crate) async fn get_all_releases(
504
505
( target, inner. trim_end_matches ( '/' ) )
505
506
} ;
506
507
let inner_path = if inner_path. is_empty ( ) {
507
- format ! ( "{}/index.html" , params . name )
508
+ format ! ( "{}/index.html" , row . target_name )
508
509
} else {
509
- format ! ( "{}/{inner_path}" , params . name )
510
+ format ! ( "{}/{inner_path}" , row . target_name )
510
511
} ;
511
512
512
513
let target = if target. is_empty ( ) {
@@ -517,7 +518,7 @@ pub(crate) async fn get_all_releases(
517
518
518
519
let res = ReleaseList {
519
520
releases,
520
- target : target . to_string ( ) ,
521
+ target,
521
522
inner_path,
522
523
crate_name : params. name ,
523
524
} ;
@@ -1484,6 +1485,64 @@ mod tests {
1484
1485
} ) ;
1485
1486
}
1486
1487
1488
+ #[ test]
1489
+ fn check_crate_name_in_redirect ( ) {
1490
+ fn check_links ( env : & TestEnvironment , url : & str , links : Vec < String > ) {
1491
+ let response = env. frontend ( ) . get ( url) . send ( ) . unwrap ( ) ;
1492
+ assert ! ( response. status( ) . is_success( ) ) ;
1493
+
1494
+ let platform_links: Vec < String > = kuchikiki:: parse_html ( )
1495
+ . one ( response. text ( ) . unwrap ( ) )
1496
+ . select ( "li a" )
1497
+ . expect ( "invalid selector" )
1498
+ . map ( |el| {
1499
+ let attributes = el. attributes . borrow ( ) ;
1500
+ let url = attributes. get ( "href" ) . expect ( "href" ) . to_string ( ) ;
1501
+ url
1502
+ } )
1503
+ . collect ( ) ;
1504
+
1505
+ assert_eq ! ( platform_links, links, ) ;
1506
+ }
1507
+
1508
+ wrapper ( |env| {
1509
+ env. fake_release ( )
1510
+ . name ( "dummy-ba" )
1511
+ . version ( "0.4.0" )
1512
+ . rustdoc_file ( "dummy-ba/index.html" )
1513
+ . rustdoc_file ( "x86_64-unknown-linux-gnu/dummy-ba/index.html" )
1514
+ . add_target ( "x86_64-unknown-linux-gnu" )
1515
+ . create ( ) ?;
1516
+ env. fake_release ( )
1517
+ . name ( "dummy-ba" )
1518
+ . version ( "0.5.0" )
1519
+ . rustdoc_file ( "dummy-ba/index.html" )
1520
+ . rustdoc_file ( "x86_64-unknown-linux-gnu/dummy-ba/index.html" )
1521
+ . add_target ( "x86_64-unknown-linux-gnu" )
1522
+ . create ( ) ?;
1523
+
1524
+ check_links (
1525
+ env,
1526
+ "/crate/dummy-ba/latest/menus/releases/dummy_ba/index.html" ,
1527
+ vec ! [
1528
+ "/crate/dummy-ba/0.5.0/target-redirect/dummy_ba/index.html" . to_string( ) ,
1529
+ "/crate/dummy-ba/0.4.0/target-redirect/dummy_ba/index.html" . to_string( ) ,
1530
+ ] ,
1531
+ ) ;
1532
+
1533
+ check_links (
1534
+ env,
1535
+ "/crate/dummy-ba/latest/menus/releases/x86_64-unknown-linux-gnu/dummy_ba/index.html" ,
1536
+ vec ! [
1537
+ "/crate/dummy-ba/0.5.0/target-redirect/x86_64-unknown-linux-gnu/dummy_ba/index.html" . to_string( ) ,
1538
+ "/crate/dummy-ba/0.4.0/target-redirect/x86_64-unknown-linux-gnu/dummy_ba/index.html" . to_string( ) ,
1539
+ ] ,
1540
+ ) ;
1541
+
1542
+ Ok ( ( ) )
1543
+ } ) ;
1544
+ }
1545
+
1487
1546
// Ensure that if there are more than a given number of targets, it will not generate them in
1488
1547
// the HTML directly (they will be loaded by AJAX if the user opens the menu).
1489
1548
#[ test]
0 commit comments