From 06db56e40820ec0067d18840648ee786163a3862 Mon Sep 17 00:00:00 2001 From: jikstra Date: Sun, 25 Apr 2021 17:48:09 +0200 Subject: Implement a raw rendering mode for recursive folder download - Raw mode only displays file/folders and is more focused on computer processing - Display a banner in footer to recursively download the current folder with wget --- tests/raw.rs | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 tests/raw.rs (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs new file mode 100644 index 0000000..5c2227b --- /dev/null +++ b/tests/raw.rs @@ -0,0 +1,103 @@ +mod fixtures; +mod utils; + +use crate::fixtures::TestServer; +use assert_cmd::prelude::*; +use assert_fs::fixture::TempDir; +use fixtures::{port, server, tmpdir, Error}; +use pretty_assertions::assert_eq; +use reqwest::blocking::Client; +use rstest::rstest; +use select::document::Document; +use select::predicate::Class; +use select::predicate::Name; +use std::process::{Command, Stdio}; +use std::thread::sleep; +use std::time::Duration; + +#[rstest] +/// The ui displays the correct wget command to download the folder recursively +fn ui_displays_wget_element(server: TestServer) -> Result<(), Error> { + let client = Client::new(); + + let body = client.get(server.url()).send()?.error_for_status()?; + let parsed = Document::from_read(body)?; + let wget_url = parsed + .find(Class("downloadWget")) + .next() + .unwrap() + .find(Class("cmd")) + .next() + .unwrap() + .text(); + assert_eq!( + wget_url, + format!( + "wget -r -c -nH -np --cut-dirs=0 -R \"index.html*\" \"{}?raw=true\"", + server.url() + ) + ); + + let body = client + .get(format!("{}/very/deeply/nested/", server.url())) + .send()? + .error_for_status()?; + let parsed = Document::from_read(body)?; + let wget_url = parsed + .find(Class("downloadWget")) + .next() + .unwrap() + .find(Class("cmd")) + .next() + .unwrap() + .text(); + assert_eq!( + wget_url, + format!( + "wget -r -c -nH -np --cut-dirs=2 -R \"index.html*\" \"{}very/deeply/nested/?raw=true\"", + server.url() + ) + ); + + Ok(()) +} + +#[rstest] +/// All hrefs in raw mode are links to directories or files & directories end with ?raw=true +fn raw_mode_links_to_directories_end_with_raw_true(server: TestServer) -> Result<(), Error> { + fn verify_a_tags(parsed: Document) { + // Ensure all links end with ?raw=true or are files + for node in parsed.find(Name("a")) { + let class = node.attr("class").unwrap(); + + if class == "root" || class == "directory" { + assert!(node.attr("href").unwrap().ends_with("?raw=true")); + } else if class == "file" { + assert!(true); + } else { + println!( + "This node is a link and neither of class directory, root or file: {:?}", + node + ); + assert!(false); + } + } + } + + let urls = [ + format!("{}?raw=true", server.url()), + format!("{}very?raw=true", server.url()), + format!("{}very/deeply/?raw=true", server.url()), + format!("{}very/deeply/nested?raw=true", server.url()), + ]; + + let client = Client::new(); + // Ensure the links to the archives are not present + for url in urls.iter() { + let body = client.get(url).send()?.error_for_status()?; + let parsed = Document::from_read(body)?; + verify_a_tags(parsed); + } + + Ok(()) +} -- cgit v1.2.3 From a6f1ee7769fc3617a13d183295c6e681d896a309 Mon Sep 17 00:00:00 2001 From: jikstra Date: Thu, 2 Sep 2021 15:41:54 +0200 Subject: Fix tests --- tests/raw.rs | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs index 5c2227b..57d1436 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -3,8 +3,7 @@ mod utils; use crate::fixtures::TestServer; use assert_cmd::prelude::*; -use assert_fs::fixture::TempDir; -use fixtures::{port, server, tmpdir, Error}; +use fixtures::{server, Error}; use pretty_assertions::assert_eq; use reqwest::blocking::Client; use rstest::rstest; @@ -68,36 +67,40 @@ fn raw_mode_links_to_directories_end_with_raw_true(server: TestServer) -> Result fn verify_a_tags(parsed: Document) { // Ensure all links end with ?raw=true or are files for node in parsed.find(Name("a")) { - let class = node.attr("class").unwrap(); - - if class == "root" || class == "directory" { - assert!(node.attr("href").unwrap().ends_with("?raw=true")); - } else if class == "file" { - assert!(true); - } else { - println!( - "This node is a link and neither of class directory, root or file: {:?}", - node - ); - assert!(false); + if let Some(class) = node.attr("class") { + if class == "root" || class == "directory" { + assert!(node.attr("href").unwrap().ends_with("?raw=true")); + } else if class == "file" { + assert!(true); + } else { + println!( + "This node is a link and neither of class directory, root or file: {:?}", + node + ); + assert!(false); + } } } } let urls = [ format!("{}?raw=true", server.url()), - format!("{}very?raw=true", server.url()), + format!("{}very/?raw=true", server.url()), format!("{}very/deeply/?raw=true", server.url()), - format!("{}very/deeply/nested?raw=true", server.url()), + format!("{}very/deeply/nested/?raw=true", server.url()), ]; + let client = Client::new(); // Ensure the links to the archives are not present for url in urls.iter() { + let body = client.get(url).send()?.error_for_status()?; + let body = client.get(url).send()?.error_for_status()?; let parsed = Document::from_read(body)?; verify_a_tags(parsed); } + Ok(()) } -- cgit v1.2.3 From 680b0d001d58a32b0caac3263103dbd9ddb5fe84 Mon Sep 17 00:00:00 2001 From: jikstra Date: Thu, 2 Sep 2021 15:50:35 +0200 Subject: cargo fmt & cargo clippy --- tests/raw.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs index 57d1436..6e0c2a0 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -73,12 +73,12 @@ fn raw_mode_links_to_directories_end_with_raw_true(server: TestServer) -> Result } else if class == "file" { assert!(true); } else { - println!( + println!( "This node is a link and neither of class directory, root or file: {:?}", node ); assert!(false); - } + } } } } @@ -90,17 +90,15 @@ fn raw_mode_links_to_directories_end_with_raw_true(server: TestServer) -> Result format!("{}very/deeply/nested/?raw=true", server.url()), ]; - let client = Client::new(); // Ensure the links to the archives are not present for url in urls.iter() { let body = client.get(url).send()?.error_for_status()?; - + let body = client.get(url).send()?.error_for_status()?; let parsed = Document::from_read(body)?; verify_a_tags(parsed); } - Ok(()) } -- cgit v1.2.3 From 71ba52ec5dc84591ead1ac64e584f990b7d66615 Mon Sep 17 00:00:00 2001 From: jikstra Date: Fri, 10 Sep 2021 15:51:08 +0200 Subject: Apply requested changes --- tests/raw.rs | 2 -- 1 file changed, 2 deletions(-) (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs index 6e0c2a0..55003be 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -93,8 +93,6 @@ fn raw_mode_links_to_directories_end_with_raw_true(server: TestServer) -> Result let client = Client::new(); // Ensure the links to the archives are not present for url in urls.iter() { - let body = client.get(url).send()?.error_for_status()?; - let body = client.get(url).send()?.error_for_status()?; let parsed = Document::from_read(body)?; verify_a_tags(parsed); -- cgit v1.2.3 From 40c112afe8b883e1e59aa475257edcf21a527d89 Mon Sep 17 00:00:00 2001 From: jikstra Date: Fri, 10 Sep 2021 16:15:26 +0200 Subject: Fix tests --- tests/raw.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs index 55003be..ed46314 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -22,7 +22,7 @@ fn ui_displays_wget_element(server: TestServer) -> Result<(), Error> { let body = client.get(server.url()).send()?.error_for_status()?; let parsed = Document::from_read(body)?; let wget_url = parsed - .find(Class("downloadWget")) + .find(Class("downloadDirectory")) .next() .unwrap() .find(Class("cmd")) @@ -43,7 +43,7 @@ fn ui_displays_wget_element(server: TestServer) -> Result<(), Error> { .error_for_status()?; let parsed = Document::from_read(body)?; let wget_url = parsed - .find(Class("downloadWget")) + .find(Class("downloadDirectory")) .next() .unwrap() .find(Class("cmd")) -- cgit v1.2.3 From da591fc995ea0189694d1f6e306d23105fa6cfc5 Mon Sep 17 00:00:00 2001 From: jikstra Date: Fri, 10 Sep 2021 16:45:45 +0200 Subject: Remove unused imports and files --- tests/raw.rs | 4 ---- tests/utils/mod.rs | 12 ------------ 2 files changed, 16 deletions(-) delete mode 100644 tests/utils/mod.rs (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs index ed46314..ea9b3a6 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -2,7 +2,6 @@ mod fixtures; mod utils; use crate::fixtures::TestServer; -use assert_cmd::prelude::*; use fixtures::{server, Error}; use pretty_assertions::assert_eq; use reqwest::blocking::Client; @@ -10,9 +9,6 @@ use rstest::rstest; use select::document::Document; use select::predicate::Class; use select::predicate::Name; -use std::process::{Command, Stdio}; -use std::thread::sleep; -use std::time::Duration; #[rstest] /// The ui displays the correct wget command to download the folder recursively diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs deleted file mode 100644 index b724945..0000000 --- a/tests/utils/mod.rs +++ /dev/null @@ -1,12 +0,0 @@ -use select::document::Document; -use select::node::Node; -use select::predicate::Name; -use select::predicate::Predicate; - -/// Return the href attribute content for the closest anchor found by `text`. -pub fn get_link_from_text(document: &Document, text: &str) -> Option { - let a_elem = document - .find(Name("a").and(|x: &Node| x.children().any(|x| x.text() == text))) - .next()?; - Some(a_elem.attr("href")?.to_string()) -} -- cgit v1.2.3 From aed508732a9d9b9e27e301e2934af6917df3e6e1 Mon Sep 17 00:00:00 2001 From: jikstra Date: Fri, 10 Sep 2021 23:34:25 +0200 Subject: Fix tests --- tests/raw.rs | 4 ++-- tests/utils/mod.rs | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 tests/utils/mod.rs (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs index ea9b3a6..0aca2ed 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -12,7 +12,7 @@ use select::predicate::Name; #[rstest] /// The ui displays the correct wget command to download the folder recursively -fn ui_displays_wget_element(server: TestServer) -> Result<(), Error> { +fn ui_displays_wget_element(#[with(&["-W"])] server: TestServer) -> Result<(), Error> { let client = Client::new(); let body = client.get(server.url()).send()?.error_for_status()?; @@ -59,7 +59,7 @@ fn ui_displays_wget_element(server: TestServer) -> Result<(), Error> { #[rstest] /// All hrefs in raw mode are links to directories or files & directories end with ?raw=true -fn raw_mode_links_to_directories_end_with_raw_true(server: TestServer) -> Result<(), Error> { +fn raw_mode_links_to_directories_end_with_raw_true(#[with(&["-W"])] server: TestServer) -> Result<(), Error> { fn verify_a_tags(parsed: Document) { // Ensure all links end with ?raw=true or are files for node in parsed.find(Name("a")) { diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs new file mode 100644 index 0000000..b724945 --- /dev/null +++ b/tests/utils/mod.rs @@ -0,0 +1,12 @@ +use select::document::Document; +use select::node::Node; +use select::predicate::Name; +use select::predicate::Predicate; + +/// Return the href attribute content for the closest anchor found by `text`. +pub fn get_link_from_text(document: &Document, text: &str) -> Option { + let a_elem = document + .find(Name("a").and(|x: &Node| x.children().any(|x| x.text() == text))) + .next()?; + Some(a_elem.attr("href")?.to_string()) +} -- cgit v1.2.3 From 726411a1d9a605d159a6f3b1c64f761573a91895 Mon Sep 17 00:00:00 2001 From: jikstra Date: Sat, 11 Sep 2021 14:04:32 +0200 Subject: cargo fmt --- tests/raw.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/raw.rs b/tests/raw.rs index 0aca2ed..82a1eee 100644 --- a/tests/raw.rs +++ b/tests/raw.rs @@ -59,7 +59,9 @@ fn ui_displays_wget_element(#[with(&["-W"])] server: TestServer) -> Result<(), E #[rstest] /// All hrefs in raw mode are links to directories or files & directories end with ?raw=true -fn raw_mode_links_to_directories_end_with_raw_true(#[with(&["-W"])] server: TestServer) -> Result<(), Error> { +fn raw_mode_links_to_directories_end_with_raw_true( + #[with(&["-W"])] server: TestServer, +) -> Result<(), Error> { fn verify_a_tags(parsed: Document) { // Ensure all links end with ?raw=true or are files for node in parsed.find(Name("a")) { -- cgit v1.2.3