Skip to content

Commit 30de0e6

Browse files
committed
add tests for redirects
1 parent b77069b commit 30de0e6

File tree

3 files changed

+64
-4
lines changed

3 files changed

+64
-4
lines changed

src/test/fakes.rs

+16-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub(crate) struct FakeRelease<'a> {
1414
/// name, content
1515
rustdoc_files: Vec<(&'a str, &'a [u8])>,
1616
doc_targets: Vec<String>,
17-
default_target: Option<String>,
17+
default_target: Option<&'a str>,
1818
cratesio_data: CratesIoData,
1919
has_docs: bool,
2020
has_examples: bool,
@@ -90,16 +90,28 @@ impl<'a> FakeRelease<'a> {
9090
self
9191
}
9292

93+
pub(crate) fn default_target(mut self, target: &'a str) -> Self {
94+
self.default_target = Some(target);
95+
self
96+
}
97+
9398
pub(crate) fn create(self) -> Result<i32, Error> {
99+
use std::fs;
100+
use std::path::Path;
101+
94102
let tempdir = tempdir::TempDir::new("docs.rs-fake")?;
95103

96104
let upload_files = |prefix: &str, files: &[(&str, &[u8])]| {
97105
let path_prefix = tempdir.path().join(prefix);
98-
std::fs::create_dir(&path_prefix)?;
106+
fs::create_dir(&path_prefix)?;
99107

100108
for (path, data) in files {
109+
// allow `src/main.rs`
110+
if let Some(parent) = Path::new(path).parent() {
111+
fs::create_dir_all(path_prefix.join(parent))?;
112+
}
101113
let file = path_prefix.join(&path);
102-
std::fs::write(file, data)?;
114+
fs::write(file, data)?;
103115
}
104116

105117
let prefix = format!("{}/{}/{}", prefix, self.package.name, self.package.version);
@@ -116,7 +128,7 @@ impl<'a> FakeRelease<'a> {
116128
&self.package,
117129
tempdir.path(),
118130
&self.build_result,
119-
self.default_target.as_deref().unwrap_or("x86_64-unknown-linux-gnu"),
131+
self.default_target.unwrap_or("x86_64-unknown-linux-gnu"),
120132
Some(source_meta),
121133
self.doc_targets,
122134
&self.cratesio_data,

src/test/mod.rs

+14
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@ pub(crate) fn assert_success(path: &str, web: &TestFrontend) -> Result<(), Error
3737
Ok(())
3838
}
3939

40+
/// Make sure that a URL redirects to a specific page
41+
pub(crate) fn assert_redirect(path: &str, expected_target: &str, web: &TestFrontend) -> Result<(), Error> {
42+
let response = web.get(path).send()?;
43+
let status = response.status();
44+
// Reqwest follows redirects
45+
assert!(status.is_success(), "failed to GET {}: {}", path, status);
46+
47+
let redirect_target = response.url().path();
48+
assert!(redirect_target == expected_target,
49+
"{}: expected redirect to {}, got redirect to {}",
50+
path, expected_target, redirect_target);
51+
Ok(())
52+
}
53+
4054
pub(crate) struct TestEnvironment {
4155
db: OnceCell<TestDatabase>,
4256
frontend: OnceCell<TestFrontend>,

src/web/rustdoc.rs

+34
Original file line numberDiff line numberDiff line change
@@ -453,4 +453,38 @@ mod test {
453453
Ok(())
454454
});
455455
}
456+
#[test]
457+
fn default_target_redirects_to_base() {
458+
wrapper(|env| {
459+
let db = env.db();
460+
db.fake_release()
461+
.name("dummy").version("0.1.0")
462+
.rustdoc_file("dummy/index.html", b"some content")
463+
.create()?;
464+
465+
let web = env.frontend();
466+
// no explicit default-target
467+
let base = "/dummy/0.1.0/dummy/";
468+
assert_success(base, web)?;
469+
assert_redirect("/dummy/0.1.0/x86_64-unknown-linux-gnu/dummy/", base, web)?;
470+
471+
// set an explicit target that requires cross-compile
472+
let target = "x86_64-pc-windows-msvc";
473+
db.fake_release().name("dummy").version("0.2.0")
474+
.rustdoc_file("dummy/index.html", b"some content")
475+
.default_target(target).create()?;
476+
let base = "/dummy/0.2.0/dummy/";
477+
assert_success(base, web)?;
478+
assert_redirect("/dummy/0.2.0/x86_64-pc-windows-msvc/dummy/", base, web)?;
479+
480+
// set an explicit target without cross-compile
481+
let target = "x86_64-unknown-linux-gnu";
482+
db.fake_release().name("dummy").version("0.3.0")
483+
.rustdoc_file("dummy/index.html", b"some content")
484+
.default_target(target).create()?;
485+
let base = "/dummy/0.3.0/dummy/";
486+
assert_success(base, web)?;
487+
assert_redirect("/dummy/0.3.0/x86_64-unknown-linux-gnu/dummy/", base, web)
488+
});
489+
}
456490
}

0 commit comments

Comments
 (0)