123 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Rust
		
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Rust
		
	
	
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{ver}_index.js");
 | 
						|
    let index_css = format!("/__dufs_v{ver}_index.css");
 | 
						|
    let favicon_ico = format!("/__dufs_v{ver}_favicon.ico");
 | 
						|
    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{ver}_index.js");
 | 
						|
    let index_css = format!("/xyz/__dufs_v{ver}_index.css");
 | 
						|
    let favicon_ico = format!("/xyz/__dufs_v{ver}_favicon.ico");
 | 
						|
    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(())
 | 
						|
}
 |