mirror of
https://github.com/sigoden/dufs.git
synced 2026-04-09 00:59:02 +03:00
feat: support hiding folders with --hidden (#73)
This commit is contained in:
@@ -67,7 +67,7 @@ fn allow_search(#[with(&["--allow-search"])] server: TestServer) -> Result<(), E
|
||||
let paths = utils::retrive_index_paths(&resp.text()?);
|
||||
assert!(!paths.is_empty());
|
||||
for p in paths {
|
||||
assert!(p.contains(&"test.html"));
|
||||
assert!(p.contains("test.html"));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ use std::process::{Command, Stdio};
|
||||
#[rstest]
|
||||
fn path_prefix_index(#[with(&["--path-prefix", "xyz"])] server: TestServer) -> Result<(), Error> {
|
||||
let resp = reqwest::blocking::get(format!("{}{}", server.url(), "xyz"))?;
|
||||
assert_index_resp!(resp);
|
||||
assert_resp_paths!(resp);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -59,3 +59,35 @@ fn asset_ico(server: TestServer) -> Result<(), Error> {
|
||||
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(())
|
||||
}
|
||||
|
||||
@@ -23,9 +23,13 @@ pub static DIR_NO_FOUND: &str = "dir-no-found/";
|
||||
#[allow(dead_code)]
|
||||
pub static DIR_NO_INDEX: &str = "dir-no-index/";
|
||||
|
||||
/// Directory names for testing hidden
|
||||
#[allow(dead_code)]
|
||||
pub static DIR_GIT: &str = ".git/";
|
||||
|
||||
/// Directory names for testing purpose
|
||||
#[allow(dead_code)]
|
||||
pub static DIRECTORIES: &[&str] = &["dira/", "dirb/", "dirc/", DIR_NO_INDEX];
|
||||
pub static DIRECTORIES: &[&str] = &["dira/", "dirb/", "dirc/", DIR_NO_INDEX, DIR_GIT];
|
||||
|
||||
/// Test fixture which creates a temporary directory with a few files and directories inside.
|
||||
/// The directories also contain files.
|
||||
|
||||
42
tests/hidden.rs
Normal file
42
tests/hidden.rs
Normal file
@@ -0,0 +1,42 @@
|
||||
mod fixtures;
|
||||
mod utils;
|
||||
|
||||
use fixtures::{server, Error, TestServer};
|
||||
use rstest::rstest;
|
||||
|
||||
#[rstest]
|
||||
#[case(server(&[] as &[&str]), true)]
|
||||
#[case(server(&["--hidden", ".git,index.html"]), false)]
|
||||
fn hidden_get_dir(#[case] server: TestServer, #[case] exist: bool) -> Result<(), Error> {
|
||||
let resp = reqwest::blocking::get(server.url())?;
|
||||
assert_eq!(resp.status(), 200);
|
||||
let paths = utils::retrive_index_paths(&resp.text()?);
|
||||
assert_eq!(paths.contains(".git/"), exist);
|
||||
assert_eq!(paths.contains("index.html"), exist);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(server(&[] as &[&str]), true)]
|
||||
#[case(server(&["--hidden", ".git,index.html"]), false)]
|
||||
fn hidden_propfind_dir(#[case] server: TestServer, #[case] exist: bool) -> Result<(), Error> {
|
||||
let resp = fetch!(b"PROPFIND", server.url()).send()?;
|
||||
assert_eq!(resp.status(), 207);
|
||||
let body = resp.text()?;
|
||||
assert_eq!(body.contains("<D:href>/.git/</D:href>"), exist);
|
||||
assert_eq!(body.contains("<D:href>/index.html</D:href>"), exist);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(server(&["--allow-search"] as &[&str]), true)]
|
||||
#[case(server(&["--allow-search", "--hidden", ".git,test.html"]), false)]
|
||||
fn hidden_search_dir(#[case] server: TestServer, #[case] exist: bool) -> Result<(), Error> {
|
||||
let resp = reqwest::blocking::get(format!("{}?q={}", server.url(), "test.html"))?;
|
||||
assert_eq!(resp.status(), 200);
|
||||
let paths = utils::retrive_index_paths(&resp.text()?);
|
||||
for p in paths {
|
||||
assert_eq!(p.contains("test.html"), exist);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -7,7 +7,7 @@ use rstest::rstest;
|
||||
#[rstest]
|
||||
fn get_dir(server: TestServer) -> Result<(), Error> {
|
||||
let resp = reqwest::blocking::get(server.url())?;
|
||||
assert_index_resp!(resp);
|
||||
assert_resp_paths!(resp);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ fn get_dir_search(#[with(&["-A"])] server: TestServer) -> Result<(), Error> {
|
||||
let paths = utils::retrive_index_paths(&resp.text()?);
|
||||
assert!(!paths.is_empty());
|
||||
for p in paths {
|
||||
assert!(p.contains(&"test.html"));
|
||||
assert!(p.contains("test.html"));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -81,7 +81,7 @@ fn get_dir_search2(#[with(&["-A"])] server: TestServer) -> Result<(), Error> {
|
||||
let paths = utils::retrive_index_paths(&resp.text()?);
|
||||
assert!(!paths.is_empty());
|
||||
for p in paths {
|
||||
assert!(p.contains(&"😀.bin"));
|
||||
assert!(p.contains("😀.bin"));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
mod fixtures;
|
||||
mod utils;
|
||||
|
||||
use fixtures::{server, Error, TestServer, DIR_NO_FOUND, DIR_NO_INDEX};
|
||||
use fixtures::{server, Error, TestServer, DIR_NO_FOUND, DIR_NO_INDEX, FILES};
|
||||
use rstest::rstest;
|
||||
|
||||
#[rstest]
|
||||
@@ -30,12 +30,12 @@ fn render_try_index(#[with(&["--render-try-index"])] server: TestServer) -> Resu
|
||||
#[rstest]
|
||||
fn render_try_index2(#[with(&["--render-try-index"])] server: TestServer) -> Result<(), Error> {
|
||||
let resp = reqwest::blocking::get(format!("{}{}", server.url(), DIR_NO_INDEX))?;
|
||||
let files: Vec<&str> = self::fixtures::FILES
|
||||
let files: Vec<&str> = FILES
|
||||
.iter()
|
||||
.filter(|v| **v != "index.html")
|
||||
.cloned()
|
||||
.collect();
|
||||
assert_index_resp!(resp, files);
|
||||
assert_resp_paths!(resp, files);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ fn tls_works(#[case] server: TestServer) -> Result<(), Error> {
|
||||
.danger_accept_invalid_certs(true)
|
||||
.build()?;
|
||||
let resp = client.get(server.url()).send()?.error_for_status()?;
|
||||
assert_index_resp!(resp);
|
||||
assert_resp_paths!(resp);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@ use serde_json::Value;
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! assert_index_resp {
|
||||
macro_rules! assert_resp_paths {
|
||||
($resp:ident) => {
|
||||
assert_index_resp!($resp, self::fixtures::FILES)
|
||||
assert_resp_paths!($resp, self::fixtures::FILES)
|
||||
};
|
||||
($resp:ident, $files:expr) => {
|
||||
assert_eq!($resp.status(), 200);
|
||||
|
||||
Reference in New Issue
Block a user