diff --git a/lib/bash/app/lib_app.sh b/lib/bash/app/lib_app.sh index 7dc6e9d..863b03a 100644 --- a/lib/bash/app/lib_app.sh +++ b/lib/bash/app/lib_app.sh @@ -528,7 +528,7 @@ base_app_config_load() { fi for key in "${__base_bash_libs_app_keys[@]+${__base_bash_libs_app_keys[@]}}"; do env_name="${__base_bash_libs_app_config["$model|$key|env"]-}" - if [[ -n "$env_name" && -n "${!env_name+x}" ]]; then + if [[ -n "$env_name" && -n "${!env_name-}" ]]; then __base_bash_libs_app_set_value__ "$model" "$key" "${!env_name}" environment || { status=$? __base_bash_libs_app_clear_staged_config__ diff --git a/lib/bash/app/tests/lib_app.bats b/lib/bash/app/tests/lib_app.bats index fd9bb16..d315704 100644 --- a/lib/bash/app/tests/lib_app.bats +++ b/lib/bash/app/tests/lib_app.bats @@ -7,7 +7,7 @@ setup() { source "$BASE_BASH_DIR/std/lib_std.sh" source "$BASE_BASH_DIR/cli/lib_cli.sh" source "$BASE_BASH_DIR/app/lib_app.sh" - unset APP_TEST_MODE APP_TEST_SECRET + unset APP_TEST_MODE APP_TEST_SECRET APP_TEST_TIMEOUT } validate_test_label() { @@ -65,6 +65,21 @@ assert_demo_snapshot() { [ "$value" = cli-secret ] } +@test "empty environment bindings do not override file configuration" { + local project_file="$TEST_TMPDIR/project.conf" value source + + base_app_init empty_env name=empty-env + base_app_config_define empty_env timeout integer default=10 env=APP_TEST_TIMEOUT + printf 'timeout=30\n' > "$project_file" + export APP_TEST_TIMEOUT= + + base_app_config_load empty_env --project "$project_file" + base_app_config_get empty_env timeout value + base_app_config_provenance empty_env timeout source + [ "$value" -eq 30 ] + [ "$source" = project ] +} + @test "enum validation preserves a caller variable with the internal scratch name" { local -a __base_bash_libs_app_enum_values=(caller-owned)