#![allow(dead_code)]
use std::path::{Path, PathBuf};
use assert_cmd::Command;
use tempfile::TempDir;
pub struct Fixture {
tmp: TempDir,
data_dir: PathBuf,
home: PathBuf,
}
impl Fixture {
pub fn new() -> Self {
let tmp = TempDir::new().expect("create tempdir");
let root = tmp.path().to_path_buf();
let data_dir = root.join("data");
let home = root.join("home");
std::fs::create_dir_all(&data_dir).unwrap();
std::fs::create_dir_all(&home).unwrap();
Self {
tmp,
data_dir,
home,
}
}
pub fn data_dir(&self) -> &Path {
&self.data_dir
}
pub fn home(&self) -> &Path {
&self.home
}
pub fn root(&self) -> &Path {
self.tmp.path()
}
pub fn cmd(&self) -> Command {
let mut cmd = Command::cargo_bin("modde").expect("binary `modde` should be buildable");
cmd.env_clear()
.env("MODDE_DATA_DIR", &self.data_dir)
.env("HOME", &self.home)
.env("XDG_DATA_HOME", self.home.join(".local/share"))
.env("XDG_CONFIG_HOME", self.home.join(".config"))
.env("XDG_CACHE_HOME", self.home.join(".cache"))
.env("PATH", std::env::var_os("PATH").unwrap_or_default());
for var in ["SSL_CERT_FILE", "SSL_CERT_DIR", "NIX_SSL_CERT_FILE"] {
if let Some(val) = std::env::var_os(var) {
cmd.env(var, val);
}
}
cmd
}
}
impl Default for Fixture {
fn default() -> Self {
Self::new()
}
}