mirror of
https://github.com/lukaszraczylo/harness-sync.git
synced 2026-10-12 00:45:22 +00:00
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package secrets
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestSubstituteSimple(t *testing.T) {
|
|
lookup := func(k string) (string, bool) {
|
|
if k == "FOO" {
|
|
return "bar", true
|
|
}
|
|
return "", false
|
|
}
|
|
out, err := Substitute("hello ${FOO}", lookup)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "hello bar", out)
|
|
}
|
|
|
|
func TestSubstituteMissingStrict(t *testing.T) {
|
|
lookup := func(k string) (string, bool) { return "", false }
|
|
_, err := Substitute("${MISSING}", lookup)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestSubstituteEscaped(t *testing.T) {
|
|
lookup := func(k string) (string, bool) { return "should-not-see", true }
|
|
out, err := Substitute("$${LITERAL}", lookup)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "${LITERAL}", out)
|
|
}
|
|
|
|
func TestOSEnvPassThroughOnMissing(t *testing.T) {
|
|
t.Setenv("HARNESS_SYNC_TEST_SET", "value-set")
|
|
v, ok := OSEnv("HARNESS_SYNC_TEST_SET")
|
|
assert.True(t, ok)
|
|
assert.Equal(t, "value-set", v)
|
|
|
|
// Unset variable returns the literal placeholder so downstream configs
|
|
// preserve runtime-resolved references like ${CLAUDE_PROJECT}.
|
|
v, ok = OSEnv("HARNESS_SYNC_TEST_NEVER_SET_XYZ")
|
|
assert.True(t, ok)
|
|
assert.Equal(t, "${HARNESS_SYNC_TEST_NEVER_SET_XYZ}", v)
|
|
}
|
|
|
|
func TestStrictOSEnvErrorsOnMissing(t *testing.T) {
|
|
t.Setenv("HARNESS_SYNC_TEST_SET2", "x")
|
|
v, ok := StrictOSEnv("HARNESS_SYNC_TEST_SET2")
|
|
assert.True(t, ok)
|
|
assert.Equal(t, "x", v)
|
|
|
|
_, ok = StrictOSEnv("HARNESS_SYNC_TEST_NEVER_SET_XYZ2")
|
|
assert.False(t, ok)
|
|
}
|
|
|
|
func TestSubstituteWithPassThroughOSEnv(t *testing.T) {
|
|
out, err := Substitute("token=${HARNESS_SYNC_NEVER_SET}", OSEnv)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "token=${HARNESS_SYNC_NEVER_SET}", out)
|
|
}
|