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  }