crates/monetize-admin/tests/console_stale.rs
//! ★ **[console-stale]** (2026-10-12): a console bundle older than its sources
//! is refused by name; a fresh one is taken.
#[path = "../build/console_fresh.rs"]
mod console_fresh;
use std::fs::{self, File};
use std::time::{Duration, SystemTime};
fn touch(p: &std::path::Path, at: SystemTime) {
fs::create_dir_all(p.parent().unwrap()).unwrap();
fs::write(p, b"x").unwrap();
File::options()
.write(true)
.open(p)
.unwrap()
.set_modified(at)
.unwrap();
}
#[test]
fn a_bundle_older_than_its_sources_is_refused_by_name_and_a_fresh_one_is_taken() {
let root = std::env::temp_dir().join(format!("console-stale-{}", std::process::id()));
let _ = fs::remove_dir_all(&root);
let (web, dist) = (
root.join("monetize-ui-web"),
root.join("monetize-ui-web/dist"),
);
let t0 = SystemTime::now() - Duration::from_secs(3600);
touch(&dist.join("index.html"), t0);
touch(&web.join("src/passkey.rs"), t0 + Duration::from_secs(60));
let refused = console_fresh::check(&dist, &web).unwrap_err();
assert!(
refused.contains("[console-stale]") && refused.contains("passkey.rs"),
"{refused}"
);
touch(&dist.join("index.html"), t0 + Duration::from_secs(120));
assert_eq!(console_fresh::check(&dist, &web), Ok(()), "rebuilt: taken");
let _ = fs::remove_dir_all(&root);
}