From 67057e2ee37342626f3046938848bed5502826ff Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Tue, 2 Jun 2026 00:50:12 +0200 Subject: [PATCH] test(server): isolate config tests from ambient env via temp-env Co-Authored-By: Claude Sonnet 4.6 --- Cargo.lock | 10 ++++++++++ crates/server/Cargo.toml | 1 + crates/server/tests/config.rs | 22 ++++++++++++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f8fe6dd..d173a28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1614,6 +1614,7 @@ dependencies = [ "reqwest", "serde_json", "sqlx", + "temp-env", "tokio", "tracing", "tracing-subscriber", @@ -1974,6 +1975,15 @@ dependencies = [ "syn", ] +[[package]] +name = "temp-env" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96374855068f47402c3121c6eed88d29cb1de8f3ab27090e273e420bdabcf050" +dependencies = [ + "parking_lot", +] + [[package]] name = "thiserror" version = "2.0.18" diff --git a/crates/server/Cargo.toml b/crates/server/Cargo.toml index 4ef88a8..c3f9888 100644 --- a/crates/server/Cargo.toml +++ b/crates/server/Cargo.toml @@ -27,3 +27,4 @@ serde_json.workspace = true api = { path = "../api" } db = { path = "../db" } sqlx.workspace = true +temp-env = "0.3" diff --git a/crates/server/tests/config.rs b/crates/server/tests/config.rs index d921ff5..ee524e9 100644 --- a/crates/server/tests/config.rs +++ b/crates/server/tests/config.rs @@ -1,17 +1,27 @@ use clap::Parser; use server::Config; +const CLEARED: [(&str, Option<&str>); 3] = [ + ("DATABASE_URL", None), + ("BIND_ADDR", None), + ("APP_NAME", None), +]; + #[test] fn parses_from_args_with_defaults() { - let cfg = Config::try_parse_from(["server", "--database-url", "postgres://localhost/test"]) - .expect("should parse"); + temp_env::with_vars(CLEARED, || { + let cfg = Config::try_parse_from(["server", "--database-url", "postgres://localhost/test"]) + .expect("should parse"); - assert_eq!(cfg.database_url, "postgres://localhost/test"); - assert_eq!(cfg.bind_addr, "0.0.0.0:8080"); - assert_eq!(cfg.app_name, "Collection Management System"); + assert_eq!(cfg.database_url, "postgres://localhost/test"); + assert_eq!(cfg.bind_addr, "0.0.0.0:8080"); + assert_eq!(cfg.app_name, "Collection Management System"); + }); } #[test] fn database_url_is_required() { - assert!(Config::try_parse_from(["server"]).is_err()); + temp_env::with_vars(CLEARED, || { + assert!(Config::try_parse_from(["server"]).is_err()); + }); }