139 lines
3.5 KiB
Rust
139 lines
3.5 KiB
Rust
use figment::Jail;
|
|
|
|
use config::{MediaBackend, load};
|
|
|
|
const CONFIG_FILE: &str = "config.toml";
|
|
|
|
#[test]
|
|
fn with_no_file_and_no_environment_every_default_stands() {
|
|
Jail::expect_with(|_jail| {
|
|
let loaded = load().unwrap();
|
|
|
|
assert_eq!(loaded.server.port, 3000);
|
|
assert_eq!(loaded.server.host, "0.0.0.0");
|
|
assert_eq!(loaded.storage.data_dir, "./data");
|
|
assert!(loaded.auth.jwt_secret.is_none());
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn a_file_overrides_the_defaults_it_names() {
|
|
Jail::expect_with(|jail| {
|
|
jail.create_file(CONFIG_FILE, "[server]\nport = 4321\n")?;
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
assert_eq!(loaded.server.port, 4321);
|
|
assert_eq!(loaded.server.host, "0.0.0.0");
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn the_environment_overrides_the_file() {
|
|
Jail::expect_with(|jail| {
|
|
jail.create_file(CONFIG_FILE, "[server]\nport = 4321\nhost = \"127.0.0.1\"\n")?;
|
|
jail.set_env("KMOOD_SERVER__PORT", "8080");
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
assert_eq!(loaded.server.port, 8080);
|
|
assert_eq!(loaded.server.host, "127.0.0.1");
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn a_double_underscore_descends_a_section() {
|
|
Jail::expect_with(|jail| {
|
|
jail.set_env("KMOOD_SERVER__CORS__ALLOW_ANY_ORIGIN", "false");
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
assert!(!loaded.server.cors.allow_any_origin);
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn a_single_underscore_stays_inside_a_field_name() {
|
|
Jail::expect_with(|jail| {
|
|
jail.set_env("KMOOD_STORAGE__DATA_DIR", "/var/lib/kmood");
|
|
jail.set_env("KMOOD_AUTH__JWT_SECRET", "from-the-environment");
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
assert_eq!(loaded.storage.data_dir, "/var/lib/kmood");
|
|
assert_eq!(
|
|
loaded.auth.jwt_secret.as_deref(),
|
|
Some("from-the-environment")
|
|
);
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn the_environment_can_switch_the_media_backend() {
|
|
Jail::expect_with(|jail| {
|
|
jail.set_env("KMOOD_STORAGE__MEDIA__BACKEND", "s3");
|
|
jail.set_env("KMOOD_STORAGE__MEDIA__BUCKET", "moods");
|
|
jail.set_env("KMOOD_STORAGE__MEDIA__REGION", "eu-central-1");
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
match loaded.storage.media {
|
|
MediaBackend::S3 { bucket, region, .. } => {
|
|
assert_eq!(bucket, "moods");
|
|
assert_eq!(region, "eu-central-1");
|
|
}
|
|
other => panic!("expected the s3 backend, got {other:?}"),
|
|
}
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn an_unrelated_variable_leaves_the_configuration_alone() {
|
|
Jail::expect_with(|jail| {
|
|
jail.set_env("PORT", "9999");
|
|
jail.set_env("SERVER__PORT", "9999");
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
assert_eq!(loaded.server.port, 3000);
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn a_list_arrives_as_an_array() {
|
|
Jail::expect_with(|jail| {
|
|
jail.set_env(
|
|
"KMOOD_SERVER__CORS__ALLOWED_ORIGINS",
|
|
r#"["https://a.example","https://b.example"]"#,
|
|
);
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
assert_eq!(
|
|
loaded.server.cors.allowed_origins,
|
|
vec!["https://a.example", "https://b.example"]
|
|
);
|
|
Ok(())
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn the_file_to_read_can_be_named_by_the_environment() {
|
|
Jail::expect_with(|jail| {
|
|
jail.create_file("elsewhere.toml", "[server]\nport = 7777\n")?;
|
|
jail.set_env("KMOOD_CONFIG_FILE", "elsewhere.toml");
|
|
|
|
let loaded = load().unwrap();
|
|
|
|
assert_eq!(loaded.server.port, 7777);
|
|
Ok(())
|
|
});
|
|
}
|