github.com/hairyhenderson/gomplate/v4@v4.0.0-pre-2.0.20240520121557-362f058f0c93/internal/tests/integration/datasources_merge_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"testing"
     7  
     8  	"gotest.tools/v3/fs"
     9  )
    10  
    11  func setupDatasourcesMergeTest(t *testing.T) (*fs.Dir, *httptest.Server) {
    12  	tmpDir := fs.NewDir(t, "gomplate-inttests",
    13  		fs.WithFiles(map[string]string{
    14  			"config.json": `{"foo": {"bar": "baz"}, "isDefault": false, "isOverride": true}`,
    15  			"default.yml": "foo:\n  bar: qux\nother: true\nisDefault: true\nisOverride: false\n",
    16  		}),
    17  	)
    18  	t.Cleanup(tmpDir.Remove)
    19  
    20  	mux := http.NewServeMux()
    21  	mux.HandleFunc("/foo.json", typeHandler("application/json", `{"foo": "bar"}`))
    22  	mux.HandleFunc("/1.env", typeHandler("application/x-env", "FOO=1\nBAR=2\n"))
    23  	mux.HandleFunc("/2.env", typeHandler("application/x-env", "FOO=3\n"))
    24  
    25  	srv := httptest.NewServer(mux)
    26  	t.Cleanup(srv.Close)
    27  
    28  	return tmpDir, srv
    29  }
    30  
    31  func TestDatasources_Merge(t *testing.T) {
    32  	tmpDir, srv := setupDatasourcesMergeTest(t)
    33  
    34  	o, e, err := cmd(t,
    35  		"-d", "user="+tmpDir.Join("config.json"),
    36  		"-d", "default="+tmpDir.Join("default.yml"),
    37  		"-d", "config=merge:user|default",
    38  		"-i", `{{ ds "config" | toJSON }}`,
    39  	).run()
    40  	assertSuccess(t, o, e, err, `{"foo":{"bar":"baz"},"isDefault":false,"isOverride":true,"other":true}`)
    41  
    42  	o, e, err = cmd(t,
    43  		"-d", "default="+tmpDir.Join("default.yml"),
    44  		"-d", "config=merge:user|default",
    45  		"-i", `{{ defineDatasource "user" `+"`"+tmpDir.Join("config.json")+"`"+` }}{{ ds "config" | toJSON }}`,
    46  	).run()
    47  	assertSuccess(t, o, e, err, `{"foo":{"bar":"baz"},"isDefault":false,"isOverride":true,"other":true}`)
    48  
    49  	o, e, err = cmd(t,
    50  		"-d", "default="+tmpDir.Join("default.yml"),
    51  		"-d", "config=merge:"+srv.URL+"/foo.json|default",
    52  		"-i", `{{ ds "config" | toJSON }}`,
    53  	).run()
    54  	assertSuccess(t, o, e, err, `{"foo":"bar","isDefault":true,"isOverride":false,"other":true}`)
    55  
    56  	o, e, err = cmd(t,
    57  		"-c", "merged=merge:"+srv.URL+"/2.env|"+srv.URL+"/1.env",
    58  		"-i", `FOO is {{ .merged.FOO }}`,
    59  	).run()
    60  	assertSuccess(t, o, e, err, `FOO is 3`)
    61  
    62  	o, e, err = cmd(t,
    63  		"-c", "default="+tmpDir.Join("default.yml"),
    64  		"-i", `{{ defineDatasource "merged" "merge:`+srv.URL+`/foo.json|default" -}}
    65  {{ ds "merged" | toJSON }}`,
    66  	).run()
    67  	assertSuccess(t, o, e, err, `{"foo":"bar","isDefault":true,"isOverride":false,"other":true}`)
    68  }