changes
All checks were successful
CI / ci (push) Successful in 19m38s

This commit is contained in:
2026-08-26 20:55:30 +02:00
parent a557c183e9
commit 23d052278a
523 changed files with 24448 additions and 2005 deletions

View File

@@ -0,0 +1,138 @@
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(())
});
}