env_test.go 3.1 KB

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