crates/monetize-server/tests/serving_word.rs
//! ★ **A32-4: monetize says what it serves** (`<data_dir>/serving.json`, [`monetize_server::serving`]):
//! every product its config declares, the ones served (their guest loaded) and the ones refused
//! by name — what the ONE box's self-update confirms on, never a bare TCP connect.
use monetize_server::registry::Registry;
use monetize_server::serving::{self, Serving};
#[test]
fn the_serving_word_names_every_declared_product_served_or_refused() {
let reg = Registry::new().pulled_product(monetize_server::testing::products::TestProduct::gunnar(), "gunnar.rs");
let declared = vec!["gunnar".to_string(), "holger".to_string()];
let s = serving::of(®, &declared, 1_900_000_000_000);
assert_eq!(s.served, vec!["gunnar".to_string()]);
assert_eq!(s.refused.len(), 1, "{s:?}");
assert!(s.refused[0].starts_with("holger"), "{s:?}");
assert_eq!((s.at_unix_ms, s.pid), (1_900_000_000_000, std::process::id()));
let dir = std::env::temp_dir().join(format!("monetize-serving-{}", std::process::id()));
let _ = std::fs::remove_dir_all(&dir);
let path = dir.join(serving::SERVING_FILE);
serving::write(&path, &s).expect("written");
let back: Serving = serde_json::from_str(&std::fs::read_to_string(&path).unwrap()).unwrap();
assert_eq!(back, s, "read back as written");
}