1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
package dotenv
import (
"testing"
"github.com/compose-spec/compose-go/v2/template"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
var envMap = map[string]string{
// UNSET_VAR: <Cannot be here :D>
"EMPTY_VAR": "",
"TEST_VAR": "Test Value",
}
var notFoundLookup = func(s string) (string, bool) {
return "", false
}
func TestExpandIfEmptyOrUnset(t *testing.T) {
templateResults := []struct {
name string
input string
result string
}{
{
"Expand if empty or unset: UNSET_VAR",
"RESULT=${UNSET_VAR:-Default Value}",
"RESULT=Default Value",
},
{
"Expand if empty or unset: EMPTY_VAR",
"RESULT=${EMPTY_VAR:-Default Value}",
"RESULT=Default Value",
},
{
"Expand if empty or unset: TEST_VAR",
"RESULT=${TEST_VAR:-Default Value}",
"RESULT=Test Value",
},
}
for _, expected := range templateResults {
t.Run(expected.name, func(t *testing.T) {
result, err := expandVariables(expected.input, envMap, notFoundLookup)
require.NoError(t, err)
assert.Equal(t, result, expected.result)
})
}
}
func TestExpandIfUnset(t *testing.T) {
templateResults := []struct {
name string
input string
result string
}{
{
"Expand if unset: UNSET_VAR",
"RESULT=${UNSET_VAR-Default Value}",
"RESULT=Default Value",
},
{
"Expand if unset: EMPTY_VAR",
"RESULT=${EMPTY_VAR-Default Value}",
"RESULT=",
},
{
"Expand if unset: TEST_VAR",
"RESULT=${TEST_VAR-Default Value}",
"RESULT=Test Value",
},
}
for _, expected := range templateResults {
t.Run(expected.name, func(t *testing.T) {
result, err := expandVariables(expected.input, envMap, notFoundLookup)
require.NoError(t, err)
assert.Equal(t, result, expected.result)
})
}
}
func TestErrorIfEmptyOrUnset(t *testing.T) {
templateResults := []struct {
name string
input string
result string
err error
}{
{
"Error empty or unset: UNSET_VAR",
"RESULT=${UNSET_VAR:?Test error}",
"RESULT=${UNSET_VAR:?Test error}",
&template.MissingRequiredError{Variable: "UNSET_VAR", Reason: "Test error"},
},
{
"Error empty or unset: EMPTY_VAR",
"RESULT=${EMPTY_VAR:?Test error}",
"RESULT=${EMPTY_VAR:?Test error}",
&template.MissingRequiredError{Variable: "EMPTY_VAR", Reason: "Test error"},
},
{
"Error empty or unset: TEST_VAR",
"RESULT=${TEST_VAR:?Default Value}",
"RESULT=Test Value",
nil,
},
}
for _, expected := range templateResults {
t.Run(expected.name, func(t *testing.T) {
result, err := expandVariables(expected.input, envMap, notFoundLookup)
assert.Equal(t, expected.err, err)
assert.Equal(t, expected.result, result)
})
}
}
func TestErrorIfUnset(t *testing.T) {
templateResults := []struct {
name string
input string
result string
err error
}{
{
"Error on unset: UNSET_VAR",
"RESULT=${UNSET_VAR?Test error}",
"RESULT=${UNSET_VAR?Test error}",
&template.MissingRequiredError{Variable: "UNSET_VAR", Reason: "Test error"},
},
{
"Error on unset: EMPTY_VAR",
"RESULT=${EMPTY_VAR?Test error}",
"RESULT=",
nil,
},
{
"Error on unset: TEST_VAR",
"RESULT=${TEST_VAR?Default Value}",
"RESULT=Test Value",
nil,
},
}
for _, expected := range templateResults {
t.Run(expected.name, func(t *testing.T) {
result, err := expandVariables(expected.input, envMap, notFoundLookup)
assert.Equal(t, expected.err, err)
assert.Equal(t, expected.result, result)
})
}
}
|