mirror of
https://github.com/sigoden/dufs.git
synced 2026-04-09 00:59:02 +03:00
feat: add --assets options to override assets (#134)
* feat: add --assets options to override assets * update readme
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
mod fixtures;
|
||||
mod utils;
|
||||
|
||||
use fixtures::{server, Error, TestServer};
|
||||
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> {
|
||||
@@ -91,3 +94,29 @@ fn asset_js_with_prefix(
|
||||
);
|
||||
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(())
|
||||
}
|
||||
|
||||
@@ -27,9 +27,13 @@ pub static DIR_NO_INDEX: &str = "dir-no-index/";
|
||||
#[allow(dead_code)]
|
||||
pub static DIR_GIT: &str = ".git/";
|
||||
|
||||
/// Directory names for testings assets override
|
||||
#[allow(dead_code)]
|
||||
pub static DIR_ASSETS: &str = "dir-assets/";
|
||||
|
||||
/// Directory names for testing purpose
|
||||
#[allow(dead_code)]
|
||||
pub static DIRECTORIES: &[&str] = &["dira/", "dirb/", "dirc/", DIR_NO_INDEX, DIR_GIT];
|
||||
pub static DIRECTORIES: &[&str] = &["dira/", "dirb/", "dirc/", DIR_NO_INDEX, DIR_GIT, DIR_ASSETS];
|
||||
|
||||
/// Test fixture which creates a temporary directory with a few files and directories inside.
|
||||
/// The directories also contain files.
|
||||
@@ -44,14 +48,21 @@ pub fn tmpdir() -> TempDir {
|
||||
.expect("Couldn't write to file");
|
||||
}
|
||||
for directory in DIRECTORIES {
|
||||
for file in FILES {
|
||||
if *directory == DIR_NO_INDEX && *file == "index.html" {
|
||||
continue;
|
||||
}
|
||||
if *directory == DIR_ASSETS {
|
||||
tmpdir
|
||||
.child(format!("{}{}", directory, file))
|
||||
.write_str(&format!("This is {}{}", directory, file))
|
||||
.child(format!("{}{}", directory, "index.html"))
|
||||
.write_str("__ASSERTS_PREFIX__index.js;DATA = __INDEX_DATA__")
|
||||
.expect("Couldn't write to file");
|
||||
} else {
|
||||
for file in FILES {
|
||||
if *directory == DIR_NO_INDEX && *file == "index.html" {
|
||||
continue;
|
||||
}
|
||||
tmpdir
|
||||
.child(format!("{}{}", directory, file))
|
||||
.write_str(&format!("This is {}{}", directory, file))
|
||||
.expect("Couldn't write to file");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,34 +104,6 @@ where
|
||||
TestServer::new(port, tmpdir, child, is_tls)
|
||||
}
|
||||
|
||||
/// Same as `server()` but ignore stderr
|
||||
#[fixture]
|
||||
#[allow(dead_code)]
|
||||
pub fn server_no_stderr<I>(#[default(&[] as &[&str])] args: I) -> TestServer
|
||||
where
|
||||
I: IntoIterator + Clone,
|
||||
I::Item: AsRef<std::ffi::OsStr>,
|
||||
{
|
||||
let port = port();
|
||||
let tmpdir = tmpdir();
|
||||
let child = Command::cargo_bin("dufs")
|
||||
.expect("Couldn't find test binary")
|
||||
.arg(tmpdir.path())
|
||||
.arg("-p")
|
||||
.arg(port.to_string())
|
||||
.args(args.clone())
|
||||
.stdout(Stdio::null())
|
||||
.stderr(Stdio::null())
|
||||
.spawn()
|
||||
.expect("Couldn't run test binary");
|
||||
let is_tls = args
|
||||
.into_iter()
|
||||
.any(|x| x.as_ref().to_str().unwrap().contains("tls"));
|
||||
|
||||
wait_for_port(port);
|
||||
TestServer::new(port, tmpdir, child, is_tls)
|
||||
}
|
||||
|
||||
/// Wait a max of 1s for the port to become available.
|
||||
pub fn wait_for_port(port: u16) {
|
||||
let start_wait = Instant::now();
|
||||
|
||||
@@ -38,7 +38,8 @@ pub fn encode_uri(v: &str) -> String {
|
||||
fn retrieve_index_paths_impl(index: &str) -> Option<IndexSet<String>> {
|
||||
let lines: Vec<&str> = index.lines().collect();
|
||||
let line = lines.iter().find(|v| v.contains("DATA ="))?;
|
||||
let value: Value = line[7..].parse().ok()?;
|
||||
let line_col = line.find("DATA =").unwrap() + 6;
|
||||
let value: Value = line[line_col..].parse().ok()?;
|
||||
let paths = value
|
||||
.get("paths")?
|
||||
.as_array()?
|
||||
|
||||
Reference in New Issue
Block a user