Skip to content

Commit 4810adc

Browse files
Correctly set use_direct_platform_links field value depending if it is a crate root or not
1 parent 26cfbea commit 4810adc

File tree

1 file changed

+35
-19
lines changed

1 file changed

+35
-19
lines changed

src/web/crate_details.rs

+35-19
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)