mod fixtures; mod utils; use assert_cmd::prelude::*; use assert_fs::fixture::TempDir; use fixtures::{port, server, tmpdir, wait_for_port, Error, TestServer, DIR_ASSETS}; use rstest::rstest; use std::process::{Command, Stdio}; #[rstest] fn assets(server: TestServer) -> Result<(), Error> { let ver = env!("CARGO_PKG_VERSION"); let resp = reqwest::blocking::get(server.url())?; let index_js = format!("/__dufs_v{}_index.js", ver); let index_css = format!("/__dufs_v{}_index.css", ver); let favicon_ico = format!("/__dufs_v{}_favicon.ico", ver); let text = resp.text()?; assert!(text.contains(&format!(r#"href="{}""#, index_css))); assert!(text.contains(&format!(r#"href="{}""#, favicon_ico))); assert!(text.contains(&format!(r#"src="{}""#, index_js))); Ok(()) } #[rstest] fn asset_js(server: TestServer) -> Result<(), Error> { let url = format!( "{}__dufs_v{}_index.js", server.url(), env!("CARGO_PKG_VERSION") ); let resp = reqwest::blocking::get(url)?; assert_eq!(resp.status(), 200); assert_eq!( resp.headers().get("content-type").unwrap(), "application/javascript" ); Ok(()) } #[rstest] fn asset_css(server: TestServer) -> Result<(), Error> { let url = format!( "{}__dufs_v{}_index.css", server.url(), env!("CARGO_PKG_VERSION") ); let resp = reqwest::blocking::get(url)?; assert_eq!(resp.status(), 200); assert_eq!(resp.headers().get("content-type").unwrap(), "text/css"); Ok(()) } #[rstest] fn asset_ico(server: TestServer) -> Result<(), Error> { let url = format!( "{}__dufs_v{}_favicon.ico", server.url(), env!("CARGO_PKG_VERSION") ); let resp = reqwest::blocking::get(url)?; assert_eq!(resp.status(), 200); assert_eq!(resp.headers().get("content-type").unwrap(), "image/x-icon"); Ok(()) } #[rstest] fn assets_with_prefix(#[with(&["--path-prefix", "xyz"])] server: TestServer) -> Result<(), Error> { let ver = env!("CARGO_PKG_VERSION"); let resp = reqwest::blocking::get(format!("{}xyz/", server.url()))?; let index_js = format!("/xyz/__dufs_v{}_index.js", ver); let index_css = format!("/xyz/__dufs_v{}_index.css", ver); let favicon_ico = format!("/xyz/__dufs_v{}_favicon.ico", ver); let text = resp.text()?; assert!(text.contains(&format!(r#"href="{}""#, index_css))); assert!(text.contains(&format!(r#"href="{}""#, favicon_ico))); assert!(text.contains(&format!(r#"src="{}""#, index_js))); Ok(()) } #[rstest] fn asset_js_with_prefix( #[with(&["--path-prefix", "xyz"])] server: TestServer, ) -> Result<(), Error> { let url = format!( "{}xyz/__dufs_v{}_index.js", server.url(), env!("CARGO_PKG_VERSION") ); let resp = reqwest::blocking::get(url)?; assert_eq!(resp.status(), 200); assert_eq!( resp.headers().get("content-type").unwrap(), "application/javascript" ); Ok(()) } #[rstest] fn assets_override(tmpdir: TempDir, port: u16) -> Result<(), Error> { let mut child = Command::cargo_bin("dufs")? .arg(tmpdir.path()) .arg("-p") .arg(port.to_string()) .arg("--assets") .arg(tmpdir.join(DIR_ASSETS)) .stdout(Stdio::piped()) .spawn()?; wait_for_port(port); let url = format!("http://localhost:{}", port); let resp = reqwest::blocking::get(&url)?; assert!(resp.text()?.starts_with(&format!( "/__dufs_v{}_index.js;DATA", env!("CARGO_PKG_VERSION") ))); let resp = reqwest::blocking::get(&url)?; assert_resp_paths!(resp); child.kill()?; Ok(()) }