Skip to content

Commit 013508c

Browse files
committed
add some tests for the source-view file list
1 parent 3ade20e commit 013508c

File tree

1 file changed

+78
-3
lines changed

1 file changed

+78
-3
lines changed

src/web/source.rs

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
//! Source code browser
2-
31
use super::{error::AxumResult, match_version_axum};
42
use crate::{
53
db::Pool,
@@ -307,8 +305,21 @@ pub(crate) async fn source_browser_handler(
307305
mod tests {
308306
use crate::test::*;
309307
use crate::web::cache::CachePolicy;
308+
use kuchiki::traits::TendrilSink;
310309
use test_case::test_case;
311310

311+
fn get_file_list_links(body: &str) -> Vec<String> {
312+
let dom = kuchiki::parse_html().one(body);
313+
314+
dom.select(".package-menu > ul > li > a")
315+
.expect("invalid selector")
316+
.map(|el| {
317+
let attributes = el.attributes.borrow();
318+
attributes.get("href").unwrap().to_string()
319+
})
320+
.collect()
321+
}
322+
312323
#[test_case(true)]
313324
#[test_case(false)]
314325
fn fetch_source_file_content(archive_storage: bool) {
@@ -508,8 +519,72 @@ mod tests {
508519
.to_str()
509520
.unwrap()
510521
.starts_with("text/html"));
511-
assert!(response.text()?.starts_with(r#"<!DOCTYPE html>"#));
512522

523+
let text = response.text()?;
524+
assert!(text.starts_with(r#"<!DOCTYPE html>"#));
525+
526+
// file list doesn't show "../"
527+
assert_eq!(get_file_list_links(&text), vec!["./config.json"]);
528+
529+
Ok(())
530+
});
531+
}
532+
533+
#[test]
534+
fn root_file_list() {
535+
wrapper(|env| {
536+
env.fake_release()
537+
.name("fake")
538+
.version("0.1.0")
539+
.source_file("folder1/some_filename.rs", b"some_random_content")
540+
.source_file("folder2/another_filename.rs", b"some_random_content")
541+
.source_file("root_filename.rs", b"some_random_content")
542+
.create()?;
543+
544+
let web = env.frontend();
545+
let response = web.get("/crate/fake/0.1.0/source/").send()?;
546+
assert!(response.status().is_success());
547+
assert_cache_control(
548+
&response,
549+
CachePolicy::ForeverInCdnAndStaleInBrowser,
550+
&env.config(),
551+
);
552+
553+
assert_eq!(
554+
get_file_list_links(&response.text()?),
555+
vec!["./folder1/", "./folder2/", "./root_filename.rs"]
556+
);
557+
Ok(())
558+
});
559+
}
560+
561+
#[test]
562+
fn child_file_list() {
563+
wrapper(|env| {
564+
env.fake_release()
565+
.name("fake")
566+
.version("0.1.0")
567+
.source_file("folder1/some_filename.rs", b"some_random_content")
568+
.source_file("folder1/more_filenames.rs", b"some_random_content")
569+
.source_file("folder2/another_filename.rs", b"some_random_content")
570+
.source_file("root_filename.rs", b"some_random_content")
571+
.create()?;
572+
573+
let web = env.frontend();
574+
let response = web
575+
.get("/crate/fake/0.1.0/source/folder1/some_filename.rs")
576+
.send()?;
577+
assert!(response.status().is_success());
578+
assert_cache_control(
579+
&response,
580+
CachePolicy::ForeverInCdnAndStaleInBrowser,
581+
&env.config(),
582+
);
583+
584+
assert_eq!(
585+
get_file_list_links(&response.text()?),
586+
vec!["../", "./more_filenames.rs", "./some_filename.rs"],
587+
);
513588
Ok(())
514589
});
515590
}

0 commit comments

Comments
 (0)