diff options
Diffstat (limited to '')
-rw-r--r-- | tests/navigation.rs | 72 |
1 files changed, 51 insertions, 21 deletions
diff --git a/tests/navigation.rs b/tests/navigation.rs index d847f3e..a78653e 100644 --- a/tests/navigation.rs +++ b/tests/navigation.rs @@ -3,13 +3,36 @@ mod utils; use assert_cmd::prelude::*; use assert_fs::fixture::TempDir; -use fixtures::{port, tmpdir, Error, DIRECTORIES, DEEPLY_NESTED_FILE}; +use fixtures::{port, tmpdir, Error, DEEPLY_NESTED_FILE, DIRECTORIES}; use rstest::rstest; use select::document::Document; use std::process::{Command, Stdio}; use std::thread::sleep; use std::time::Duration; use utils::get_link_from_text; +use url::Url; + +#[rstest] +/// The index directory gets a trailing slash. +fn index_gets_trailing_slash(tmpdir: TempDir, port: u16) -> Result<(), Error> { + let mut child = Command::cargo_bin("miniserve")? + .arg("-p") + .arg(port.to_string()) + .arg(tmpdir.path()) + .stdout(Stdio::null()) + .spawn()?; + + sleep(Duration::from_secs(1)); + + let base_url = Url::parse(&format!("http://localhost:{}", port))?; + let expected_url = format!("{}", base_url); + let resp = reqwest::get(base_url.as_str())?; + assert_eq!(resp.url().as_str(), expected_url); + + child.kill()?; + + Ok(()) +} #[rstest] /// We can navigate into directories and back using shown links. @@ -23,20 +46,20 @@ fn can_navigate_into_dirs_and_back(tmpdir: TempDir, port: u16) -> Result<(), Err sleep(Duration::from_secs(1)); - let original_location = format!("http://localhost:{}/", port); - let body = reqwest::get(&original_location)?.error_for_status()?; - let parsed = Document::from_read(body)?; + let base_url = Url::parse(&format!("http://localhost:{}/", port))?; + let initial_body = reqwest::get(base_url.as_str())?.error_for_status()?; + let initial_parsed = Document::from_read(initial_body)?; for &directory in DIRECTORIES { - let dir_elem = get_link_from_text(&parsed, &directory).expect("Dir should have been here."); - let dir_body = - reqwest::get(format!("http://localhost:{}/{}", port, dir_elem).as_str())?.error_for_status()?; - let dir_parsed = Document::from_read(dir_body)?; - let back_link = get_link_from_text(&dir_parsed, "Parent directory").expect("Back link should be there."); - let back_location = format!("http://localhost:{}{}", port, back_link); + let dir_elem = get_link_from_text(&initial_parsed, &directory).expect("Dir not found."); + let body = reqwest::get(&format!("{}{}", base_url, dir_elem))?.error_for_status()?; + let parsed = Document::from_read(body)?; + let back_link = + get_link_from_text(&parsed, "Parent directory").expect("Back link not found."); + let resp = reqwest::get(&format!("{}{}", base_url, back_link))?; // Now check that we can actually get back to the original location we came from using the // link. - assert_eq!(back_location, original_location); + assert_eq!(resp.url(), &base_url); } child.kill()?; @@ -59,30 +82,37 @@ fn can_navigate_deep_into_dirs_and_back(tmpdir: TempDir, port: u16) -> Result<() // Create a vector of directory names. We don't need to fetch the file and so we'll // remove that part. let dir_names = { - let mut comps = DEEPLY_NESTED_FILE.split("/").map(|d| format!("{}/", d)).collect::<Vec<String>>(); + let mut comps = DEEPLY_NESTED_FILE + .split("/") + .map(|d| format!("{}/", d)) + .collect::<Vec<String>>(); comps.pop(); comps }; - let base_url = format!("http://localhost:{}", port); + let base_url = Url::parse(&format!("http://localhost:{}/", port))?; // First we'll go forwards through the directory tree and then we'll go backwards. // In the end, we'll have to end up where we came from. let mut next_url = base_url.clone(); for dir_name in dir_names.iter() { - let body = reqwest::get(&next_url)?.error_for_status()?; + let resp = reqwest::get(next_url.as_str())?; + let body = resp.error_for_status()?; let parsed = Document::from_read(body)?; - let dir_elem = get_link_from_text(&parsed, &dir_name).expect("Dir should have been here."); - next_url = format!("{}{}", base_url, dir_elem); + let dir_elem = get_link_from_text(&parsed, &dir_name).expect("Dir not found."); + next_url = next_url.join(&dir_elem)?; } + assert_ne!(base_url, next_url); // Now try to get out the tree again using links only. - let start_url = format!("{}/", base_url); - while next_url != start_url { - let body = reqwest::get(&next_url)?.error_for_status()?; + while next_url != base_url { + let resp = reqwest::get(next_url.as_str())?; + let body = resp.error_for_status()?; let parsed = Document::from_read(body)?; - let dir_elem = get_link_from_text(&parsed, "Parent directory").expect("Back link not found."); - next_url = format!("{}{}", base_url, dir_elem); + let dir_elem = + get_link_from_text(&parsed, "Parent directory").expect("Back link not found."); + next_url = next_url.join(&dir_elem)?; } + assert_eq!(base_url, next_url); child.kill()?; |