pub(super) fn render_mock_server_spawn_env(
out: &mut String,
alt_host: &str,
env: &std::collections::BTreeMap<String, String>,
) {
let env_keys: Vec<&str> = env.keys().map(String::as_str).collect();
out.push_str(&crate::e2e::template_env::render(
"go/mock_server_spawn_env.go.jinja",
minijinja::context! { alt_host => alt_host, env_keys => env_keys },
));
}
#[cfg(test)]
mod tests {
use super::render_mock_server_spawn_env;
#[test]
fn bakes_the_configured_alt_host_lookup_env_guarded() {
let mut out = String::new();
render_mock_server_spawn_env(&mut out, "alt-host-from-config.test", &Default::default());
assert!(
out.contains("cmdEnv = append(cmdEnv, \"ALEF_MOCK_ALT_HOST=alt-host-from-config.test\")"),
"got:\n{out}"
);
assert!(
out.contains("os.LookupEnv(\"ALEF_MOCK_ALT_HOST\")"),
"must guard on LookupEnv so an already-exported override wins, got:\n{out}"
);
}
#[test]
fn forwards_env_keys_after_the_alt_host_block_in_sorted_order() {
let mut env = std::collections::BTreeMap::new();
env.insert("ZEBRA".to_string(), "z".to_string());
env.insert("ALPHA".to_string(), "a".to_string());
let mut out = String::new();
render_mock_server_spawn_env(&mut out, "localhost", &env);
let alt_host_idx = out.find("ALEF_MOCK_ALT_HOST").expect("must emit alt_host block");
let alpha_idx = out
.find("cmdEnv = append(cmdEnv, \"ALPHA=\"+v)")
.expect("must forward ALPHA");
let zebra_idx = out
.find("cmdEnv = append(cmdEnv, \"ZEBRA=\"+v)")
.expect("must forward ZEBRA");
assert!(
alt_host_idx < alpha_idx && alpha_idx < zebra_idx,
"expected alt_host, then ALPHA, then ZEBRA in order; got:\n{out}"
);
}
#[test]
fn empty_env_emits_only_the_alt_host_block() {
let mut out = String::new();
render_mock_server_spawn_env(&mut out, "localhost", &Default::default());
assert_eq!(
out,
"\tif _, ok := os.LookupEnv(\"ALEF_MOCK_ALT_HOST\"); !ok {\n\t\tcmdEnv = append(cmdEnv, \"ALEF_MOCK_ALT_HOST=localhost\")\n\t}\n",
"got:\n{out}"
);
}
}