#![cfg(not(target_os = "linux"))]
use std::path::PathBuf;
use std::process::Command;
fn oxipage_bin() -> PathBuf {
PathBuf::from(env!("CARGO_BIN_EXE_oxipage"))
}
fn oxipage(args: &[&str], sandbox_home: &PathBuf) -> std::process::Output {
Command::new(oxipage_bin())
.args(args)
.env("HOME", sandbox_home)
.env_remove("OXIPAGE_SITE")
.env_remove("OXIPAGE_ENDPOINT")
.env_remove("OXIPAGE_TOKEN")
.output()
.expect("failed to run oxipage")
}
#[test]
fn test_help() {
let sb = std::env::temp_dir().join("oxipage_e2e_test");
let out = oxipage(&["--help"], &sb);
assert!(
out.status.success(),
"stdout: {}",
String::from_utf8_lossy(&out.stdout)
);
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("Usage:"));
assert!(stdout.contains("--site"));
assert!(stdout.contains("--insecure"));
assert!(stdout.contains("site"));
assert!(stdout.contains("blog"));
assert!(stdout.contains("backup"));
}
#[ignore]
#[test]
fn test_site_list_empty() {
let sb = std::env::temp_dir().join("oxipage_e2e_test_empty");
let out = oxipage(&["site", "list"], &sb);
assert!(
out.status.success(),
"stderr: {}",
String::from_utf8_lossy(&out.stderr)
);
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("no sites configured"));
}
#[ignore]
#[test]
fn test_site_add_list_rm_flow() {
let sb = std::env::temp_dir().join("oxipage_e2e_test_crud");
let out = oxipage(
&[
"site",
"add",
"test-site",
"--endpoint",
"http://localhost:9999",
],
&sb,
);
assert!(
out.status.success(),
"add failed: {}",
String::from_utf8_lossy(&out.stderr)
);
let out = oxipage(&["site", "list"], &sb);
assert!(out.status.success());
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("test-site"));
let out = oxipage(&["site", "use", "test-site"], &sb);
assert!(out.status.success());
let out = oxipage(&["site", "show"], &sb);
assert!(out.status.success());
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("test-site"));
assert!(stdout.contains("active"));
let out = oxipage(&["site", "rm", "test-site"], &sb);
assert!(
out.status.success(),
"rm failed: {}",
String::from_utf8_lossy(&out.stderr)
);
let out = oxipage(&["site", "list"], &sb);
assert!(out.status.success());
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(!stdout.contains("test-site"));
}
#[test]
fn test_site_flag_unknown_errors() {
let sb = std::env::temp_dir().join("oxipage_e2e_test_bad_flag");
let out = oxipage(&["--site", "nonexistent-xyz", "site", "list"], &sb);
assert!(!out.status.success());
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(stderr.contains("not found"));
assert!(stderr.contains("nonexistent-xyz"));
}
#[test]
fn test_oxipage_site_env_unknown_errors() {
let sb = std::env::temp_dir().join("oxipage_e2e_test_bad_env");
let out = Command::new(oxipage_bin())
.args(["site", "list"])
.env("HOME", &sb)
.env("OXIPAGE_SITE", "nonexistent-env")
.env_remove("OXIPAGE_ENDPOINT")
.env_remove("OXIPAGE_TOKEN")
.output()
.expect("failed to run oxipage");
assert!(!out.status.success());
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(stderr.contains("not found"));
assert!(stderr.contains("nonexistent-env"));
}
#[ignore]
#[test]
fn test_json_output() {
let sb = std::env::temp_dir().join("oxipage_e2e_test_json");
let _ = oxipage(
&[
"site",
"add",
"json-test",
"--endpoint",
"http://localhost:7777",
],
&sb,
);
let out = oxipage(&["--json", "site", "list"], &sb);
assert!(
out.status.success(),
"list failed: {}",
String::from_utf8_lossy(&out.stderr)
);
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.starts_with('[') || stdout.starts_with("[\n"));
assert!(stdout.contains("json-test"));
let _ = oxipage(&["site", "rm", "json-test"], &sb);
}
#[test]
fn test_site_add_default_flag() {
let sb = std::env::temp_dir().join("oxipage_e2e_test_default");
let out = oxipage(
&[
"site",
"add",
"primary",
"--endpoint",
"http://pri:1",
"--default",
],
&sb,
);
assert!(
out.status.success(),
"add failed: {}",
String::from_utf8_lossy(&out.stderr)
);
let out = oxipage(&["site", "list"], &sb);
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(stdout.contains("* primary"));
let _ = oxipage(&["site", "rm", "primary"], &sb);
}