github.com/hairyhenderson/gomplate/v4@v4.0.0-pre-2.0.20240520121557-362f058f0c93/context_test.go (about) 1 package gomplate 2 3 import ( 4 "context" 5 "net/url" 6 "os" 7 "testing" 8 9 "github.com/hairyhenderson/go-fsimpl" 10 "github.com/hairyhenderson/gomplate/v4/data" 11 "github.com/hairyhenderson/gomplate/v4/internal/config" 12 "github.com/hairyhenderson/gomplate/v4/internal/datafs" 13 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestEnvMapifiesEnvironment(t *testing.T) { 19 c := &tmplctx{} 20 env := c.Env() 21 assert.Equal(t, env["USER"], os.Getenv("USER")) 22 } 23 24 func TestEnvGetsUpdatedEnvironment(t *testing.T) { 25 c := &tmplctx{} 26 assert.Empty(t, c.Env()["FOO"]) 27 t.Setenv("FOO", "foo") 28 assert.Equal(t, "foo", c.Env()["FOO"]) 29 } 30 31 func TestCreateContext(t *testing.T) { 32 ctx := context.Background() 33 c, err := createTmplContext(ctx, nil, nil) 34 require.NoError(t, err) 35 assert.Empty(t, c) 36 37 fsmux := fsimpl.NewMux() 38 fsmux.Add(datafs.EnvFS) 39 40 ctx = datafs.ContextWithFSProvider(ctx, fsmux) 41 42 fooURL := "env:///foo?type=application/yaml" 43 barURL := "env:///bar?type=application/yaml" 44 uf, _ := url.Parse(fooURL) 45 ub, _ := url.Parse(barURL) 46 //nolint:staticcheck 47 d := &data.Data{ 48 Sources: map[string]config.DataSource{ 49 "foo": {URL: uf}, 50 ".": {URL: ub}, 51 }, 52 } 53 t.Setenv("foo", "foo: bar") 54 c, err = createTmplContext(ctx, []string{"foo"}, d) 55 require.NoError(t, err) 56 assert.IsType(t, &tmplctx{}, c) 57 tctx := c.(*tmplctx) 58 ds := ((*tctx)["foo"]).(map[string]interface{}) 59 assert.Equal(t, "bar", ds["foo"]) 60 61 t.Setenv("bar", "bar: baz") 62 c, err = createTmplContext(ctx, []string{"."}, d) 63 require.NoError(t, err) 64 assert.IsType(t, map[string]interface{}{}, c) 65 ds = c.(map[string]interface{}) 66 assert.Equal(t, "baz", ds["bar"]) 67 }