env_test.go

  1package env
  2
  3import (
  4	"os"
  5	"strings"
  6	"testing"
  7
  8	"github.com/stretchr/testify/assert"
  9)
 10
 11func TestOsEnv_Get(t *testing.T) {
 12	env := New()
 13
 14	// Test getting an existing environment variable
 15	os.Setenv("TEST_VAR", "test_value")
 16	defer os.Unsetenv("TEST_VAR")
 17
 18	value := env.Get("TEST_VAR")
 19	assert.Equal(t, "test_value", value)
 20
 21	// Test getting a non-existent environment variable
 22	value = env.Get("NON_EXISTENT_VAR")
 23	assert.Equal(t, "", value)
 24}
 25
 26func TestOsEnv_Env(t *testing.T) {
 27	env := New()
 28
 29	envVars := env.Env()
 30
 31	// Environment should not be empty in normal circumstances
 32	assert.NotNil(t, envVars)
 33	assert.Greater(t, len(envVars), 0)
 34
 35	// Each environment variable should be in key=value format
 36	for _, envVar := range envVars {
 37		assert.Contains(t, envVar, "=")
 38	}
 39}
 40
 41func TestNewFromMap(t *testing.T) {
 42	testMap := map[string]string{
 43		"KEY1": "value1",
 44		"KEY2": "value2",
 45	}
 46
 47	env := NewFromMap(testMap)
 48	assert.NotNil(t, env)
 49	assert.IsType(t, &mapEnv{}, env)
 50}
 51
 52func TestMapEnv_Get(t *testing.T) {
 53	testMap := map[string]string{
 54		"KEY1": "value1",
 55		"KEY2": "value2",
 56	}
 57
 58	env := NewFromMap(testMap)
 59
 60	// Test getting existing keys
 61	assert.Equal(t, "value1", env.Get("KEY1"))
 62	assert.Equal(t, "value2", env.Get("KEY2"))
 63
 64	// Test getting non-existent key
 65	assert.Equal(t, "", env.Get("NON_EXISTENT"))
 66}
 67
 68func TestMapEnv_Env(t *testing.T) {
 69	t.Run("with values", func(t *testing.T) {
 70		testMap := map[string]string{
 71			"KEY1": "value1",
 72			"KEY2": "value2",
 73		}
 74
 75		env := NewFromMap(testMap)
 76		envVars := env.Env()
 77
 78		assert.Len(t, envVars, 2)
 79
 80		// Convert to map for easier testing (order is not guaranteed)
 81		envMap := make(map[string]string)
 82		for _, envVar := range envVars {
 83			parts := strings.SplitN(envVar, "=", 2)
 84			assert.Len(t, parts, 2)
 85			envMap[parts[0]] = parts[1]
 86		}
 87
 88		assert.Equal(t, "value1", envMap["KEY1"])
 89		assert.Equal(t, "value2", envMap["KEY2"])
 90	})
 91
 92	t.Run("empty map", func(t *testing.T) {
 93		env := NewFromMap(map[string]string{})
 94		envVars := env.Env()
 95		assert.Nil(t, envVars)
 96	})
 97
 98	t.Run("nil map", func(t *testing.T) {
 99		env := NewFromMap(nil)
100		envVars := env.Env()
101		assert.Nil(t, envVars)
102	})
103}
104
105func TestMapEnv_GetEmptyValue(t *testing.T) {
106	testMap := map[string]string{
107		"EMPTY_KEY":  "",
108		"NORMAL_KEY": "value",
109	}
110
111	env := NewFromMap(testMap)
112
113	// Test that empty values are returned correctly
114	assert.Equal(t, "", env.Get("EMPTY_KEY"))
115	assert.Equal(t, "value", env.Get("NORMAL_KEY"))
116}
117
118func TestMapEnv_EnvFormat(t *testing.T) {
119	testMap := map[string]string{
120		"KEY_WITH_EQUALS": "value=with=equals",
121		"KEY_WITH_SPACES": "value with spaces",
122	}
123
124	env := NewFromMap(testMap)
125	envVars := env.Env()
126
127	assert.Len(t, envVars, 2)
128
129	// Check that the format is correct even with special characters
130	found := make(map[string]bool)
131	for _, envVar := range envVars {
132		if envVar == "KEY_WITH_EQUALS=value=with=equals" {
133			found["equals"] = true
134		}
135		if envVar == "KEY_WITH_SPACES=value with spaces" {
136			found["spaces"] = true
137		}
138	}
139
140	assert.True(t, found["equals"], "Should handle values with equals signs")
141	assert.True(t, found["spaces"], "Should handle values with spaces")
142}