92 lines
3.5 KiB
Go
92 lines
3.5 KiB
Go
package env
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestBool(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
key string
|
|
value string
|
|
defaultValue bool
|
|
expected bool
|
|
shouldSet bool
|
|
}{
|
|
// Truthy values
|
|
{"true lowercase", "TEST_BOOL", "true", false, true, true},
|
|
{"true uppercase", "TEST_BOOL", "TRUE", false, true, true},
|
|
{"true mixed case", "TEST_BOOL", "TrUe", false, true, true},
|
|
{"t", "TEST_BOOL", "t", false, true, true},
|
|
{"T", "TEST_BOOL", "T", false, true, true},
|
|
{"yes", "TEST_BOOL", "yes", false, true, true},
|
|
{"YES", "TEST_BOOL", "YES", false, true, true},
|
|
{"y", "TEST_BOOL", "y", false, true, true},
|
|
{"Y", "TEST_BOOL", "Y", false, true, true},
|
|
{"on", "TEST_BOOL", "on", false, true, true},
|
|
{"ON", "TEST_BOOL", "ON", false, true, true},
|
|
{"1", "TEST_BOOL", "1", false, true, true},
|
|
{"enable", "TEST_BOOL", "enable", false, true, true},
|
|
{"ENABLE", "TEST_BOOL", "ENABLE", false, true, true},
|
|
{"enabled", "TEST_BOOL", "enabled", false, true, true},
|
|
{"ENABLED", "TEST_BOOL", "ENABLED", false, true, true},
|
|
{"active", "TEST_BOOL", "active", false, true, true},
|
|
{"ACTIVE", "TEST_BOOL", "ACTIVE", false, true, true},
|
|
{"affirmative", "TEST_BOOL", "affirmative", false, true, true},
|
|
{"AFFIRMATIVE", "TEST_BOOL", "AFFIRMATIVE", false, true, true},
|
|
|
|
// Falsy values
|
|
{"false lowercase", "TEST_BOOL", "false", true, false, true},
|
|
{"false uppercase", "TEST_BOOL", "FALSE", true, false, true},
|
|
{"false mixed case", "TEST_BOOL", "FaLsE", true, false, true},
|
|
{"f", "TEST_BOOL", "f", true, false, true},
|
|
{"F", "TEST_BOOL", "F", true, false, true},
|
|
{"no", "TEST_BOOL", "no", true, false, true},
|
|
{"NO", "TEST_BOOL", "NO", true, false, true},
|
|
{"n", "TEST_BOOL", "n", true, false, true},
|
|
{"N", "TEST_BOOL", "N", true, false, true},
|
|
{"off", "TEST_BOOL", "off", true, false, true},
|
|
{"OFF", "TEST_BOOL", "OFF", true, false, true},
|
|
{"0", "TEST_BOOL", "0", true, false, true},
|
|
{"disable", "TEST_BOOL", "disable", true, false, true},
|
|
{"DISABLE", "TEST_BOOL", "DISABLE", true, false, true},
|
|
{"disabled", "TEST_BOOL", "disabled", true, false, true},
|
|
{"DISABLED", "TEST_BOOL", "DISABLED", true, false, true},
|
|
{"inactive", "TEST_BOOL", "inactive", true, false, true},
|
|
{"INACTIVE", "TEST_BOOL", "INACTIVE", true, false, true},
|
|
{"negative", "TEST_BOOL", "negative", true, false, true},
|
|
{"NEGATIVE", "TEST_BOOL", "NEGATIVE", true, false, true},
|
|
|
|
// Whitespace handling
|
|
{"true with spaces", "TEST_BOOL", " true ", false, true, true},
|
|
{"false with spaces", "TEST_BOOL", " false ", true, false, true},
|
|
|
|
// Default values
|
|
{"not set default true", "TEST_BOOL_NOTSET", "", true, true, false},
|
|
{"not set default false", "TEST_BOOL_NOTSET", "", false, false, false},
|
|
|
|
// Invalid values should return default
|
|
{"invalid value default true", "TEST_BOOL", "invalid", true, true, true},
|
|
{"invalid value default false", "TEST_BOOL", "invalid", false, false, true},
|
|
{"empty string default true", "TEST_BOOL", "", true, true, true},
|
|
{"empty string default false", "TEST_BOOL", "", false, false, true},
|
|
{"random text default true", "TEST_BOOL", "maybe", true, true, true},
|
|
{"random text default false", "TEST_BOOL", "maybe", false, false, true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if tt.shouldSet {
|
|
os.Setenv(tt.key, tt.value)
|
|
defer os.Unsetenv(tt.key)
|
|
}
|
|
|
|
result := Bool(tt.key, tt.defaultValue)
|
|
if result != tt.expected {
|
|
t.Errorf("Bool() = %v, want %v", result, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|