Skip to content

Commit da730e1

Browse files
GuillaumeGomezsyphar
authored andcommitted
Fix invalid release link generation
1 parent 5f05b27 commit da730e1

2 files changed

+71
-6
lines changed

.sqlx/query-23457d8f5ff3b551d5c4039615b4e72a4609ebfb0390708f5a61f7ab66db8808.json .sqlx/query-3f0fb7b26fb494e04dab61a8a831d0839fd63d13b08546c1506e7163bd363c19.json

+8-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/web/crate_details.rs

+63-4
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,8 @@ pub(crate) async fn get_all_releases(
469469
let row = sqlx::query!(
470470
"SELECT
471471
crates.id AS crate_id,
472-
releases.doc_targets
472+
releases.doc_targets,
473+
releases.target_name
473474
FROM crates
474475
INNER JOIN releases on crates.id = releases.crate_id
475476
WHERE crates.name = $1 and releases.version = $2;",
@@ -504,9 +505,9 @@ pub(crate) async fn get_all_releases(
504505
(target, inner.trim_end_matches('/'))
505506
};
506507
let inner_path = if inner_path.is_empty() {
507-
format!("{}/index.html", params.name)
508+
format!("{}/index.html", row.target_name)
508509
} else {
509-
format!("{}/{inner_path}", params.name)
510+
format!("{}/{inner_path}", row.target_name)
510511
};
511512

512513
let target = if target.is_empty() {
@@ -517,7 +518,7 @@ pub(crate) async fn get_all_releases(
517518

518519
let res = ReleaseList {
519520
releases,
520-
target: target.to_string(),
521+
target,
521522
inner_path,
522523
crate_name: params.name,
523524
};
@@ -1484,6 +1485,64 @@ mod tests {
14841485
});
14851486
}
14861487

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+
14871546
// Ensure that if there are more than a given number of targets, it will not generate them in
14881547
// the HTML directly (they will be loaded by AJAX if the user opens the menu).
14891548
#[test]

0 commit comments

Comments
 (0)