Files
core/test/rust/native/application/run.rs
T
2026-11-03 03:32:07 +00:00

62 lines
2.2 KiB
Rust

use super::*;
#[test]
fn application_run_keeps_database_between_commands_and_removes_only_its_binary() {
let directory = Directory::new();
let target = directory.0.join("module/demo/account");
std::fs::create_dir_all(&target).unwrap();
let source = fixture()
.with_file_name("database")
.join("module/demo/account");
for name in ["api.dever", "model.dever", "app.dever"] {
std::fs::copy(source.join(name), target.join(name)).unwrap();
}
std::fs::create_dir(directory.0.join("config")).unwrap();
std::fs::create_dir(directory.0.join("data")).unwrap();
std::fs::write(directory.0.join("data/keep.txt"), "keep").unwrap();
std::fs::write(directory.0.join("config/setting.json"), r#"{"database":{"default":{"type":"sqlite","path":"data/account.db","max_connections":1}}}"#).unwrap();
let run = |name: &str, input: &str| {
Command::new(env!("CARGO_BIN_EXE_dever"))
.arg("run")
.arg(&directory.0)
.args(["--", name, input])
.output()
.unwrap()
};
let created = run("demo.account.create", r#"{"name":"persistent"}"#);
assert!(
created.status.success(),
"{}",
String::from_utf8_lossy(&created.stderr)
);
assert!(directory.0.join("data/account.db").is_file());
let count = run("demo.account.count", "{}");
assert!(count.status.success());
assert_eq!(
serde_json::from_slice::<serde_json::Value>(&count.stdout).unwrap()["data"],
1
);
let failed = run(
"demo.account.explode",
r#"{"name":"rolled back","value":9223372036854775807}"#,
);
assert!(!failed.status.success());
let count = run("demo.account.count", "{}");
assert!(count.status.success());
assert_eq!(
serde_json::from_slice::<serde_json::Value>(&count.stdout).unwrap()["data"],
1
);
assert_eq!(
std::fs::read_to_string(directory.0.join("data/keep.txt")).unwrap(),
"keep"
);
assert!(std::fs::read_dir(&directory.0).unwrap().all(|entry| {
!entry
.unwrap()
.file_name()
.to_string_lossy()
.starts_with(".dever-run-")
}));
}