diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/readme.rs | 101 |
1 files changed, 69 insertions, 32 deletions
diff --git a/tests/readme.rs b/tests/readme.rs index 530a2a1..dd56311 100644 --- a/tests/readme.rs +++ b/tests/readme.rs @@ -6,6 +6,7 @@ use select::predicate::Attr; use select::{document::Document, node::Node}; use std::fs::{remove_file, File}; use std::io::Write; +use std::path::PathBuf; #[rstest] /// Do not show readme contents by default @@ -33,49 +34,85 @@ fn no_readme_contents(server: TestServer) -> Result<(), Error> { case("README.MD"), case("ReAdMe.Md") )] -/// Show readme contents when told to if there is readme.md/README.md file -fn show_readme_contents( + +/// Show readme contents when told to if there is readme.md/README.md file in root +fn show_root_readme_contents( + #[with(&["--readme"])] server: TestServer, + readme_name: &str, +) -> Result<(), Error> { + let readme_path = write_readme_contents(server.path().to_path_buf(), readme_name); + let body = reqwest::blocking::get(server.url())?.error_for_status()?; + let parsed = Document::from_read(body)?; + + for &file in FILES { + assert!(parsed.find(|x: &Node| x.text() == file).next().is_some()); + } + assert_readme_contents(&parsed, &readme_name); + remove_file(readme_path).unwrap(); + Ok(()) +} + +#[rstest( + readme_name, + case("Readme.md"), + case("readme.md"), + case("README.md"), + case("README.MD"), + case("ReAdMe.Md") +)] +/// Show readme contents when told to if there is readme.md/README.md file in directories +fn show_nested_readme_contents( #[with(&["--readme"])] server: TestServer, readme_name: &str, ) -> Result<(), Error> { for dir in DIRECTORIES { - let readme_path = server.path().join(dir).join(readme_name); - let mut readme_file = File::create(&readme_path)?; - readme_file - .write( - format!("Contents of {}", readme_name) - .to_string() - .as_bytes(), - ) - .expect("Couldn't write readme"); + let readme_path = write_readme_contents(server.path().join(dir), readme_name); let body = reqwest::blocking::get(server.url().join(dir)?)?.error_for_status()?; let parsed = Document::from_read(body)?; for &file in FILES { assert!(parsed.find(|x: &Node| x.text() == file).next().is_some()); } - - assert!(parsed.find(Attr("id", "readme")).next().is_some()); - assert!(parsed.find(Attr("id", "readme-filename")).next().is_some()); - assert!( - parsed - .find(Attr("id", "readme-filename")) - .next() - .unwrap() - .text() - == readme_name - ); - assert!(parsed.find(Attr("id", "readme-contents")).next().is_some()); - assert!( - parsed - .find(Attr("id", "readme-contents")) - .next() - .unwrap() - .text() - .trim() - == format!("Contents of {}", readme_name) - ); + assert_readme_contents(&parsed, &readme_name); remove_file(readme_path).unwrap(); } Ok(()) } + +fn write_readme_contents(path: PathBuf, filename: &str) -> PathBuf { + let readme_path = path.join(filename); + let mut readme_file = File::create(&readme_path).unwrap(); + readme_file + .write(format!("Contents of {}", filename).to_string().as_bytes()) + .expect("Couldn't write readme"); + readme_path +} + +fn assert_readme_contents(parsed_dom: &Document, filename: &str) { + assert!(parsed_dom.find(Attr("id", "readme")).next().is_some()); + assert!(parsed_dom + .find(Attr("id", "readme-filename")) + .next() + .is_some()); + assert!( + parsed_dom + .find(Attr("id", "readme-filename")) + .next() + .unwrap() + .text() + == filename + ); + assert!(parsed_dom + .find(Attr("id", "readme-contents")) + .next() + .is_some()); + assert!( + parsed_dom + .find(Attr("id", "readme-contents")) + .next() + .unwrap() + .text() + .trim() + == format!("Contents of {}", filename) + ); +} |