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 }