databricks-cli/internal/bundle/validate_test.go

61 lines
1.5 KiB
Go

package bundle
import (
"context"
"encoding/json"
"testing"
"github.com/databricks/cli/internal/testutil"
"github.com/databricks/cli/libs/dyn"
"github.com/databricks/cli/libs/dyn/convert"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestAccBundleValidate(t *testing.T) {
testutil.GetEnvOrSkipTest(t, "CLOUD_ENV")
tmpDir := t.TempDir()
testutil.WriteFile(t,
`
bundle:
name: "foobar"
resources:
jobs:
outer_loop:
name: outer loop
tasks:
- task_key: my task
run_job_task:
job_id: ${resources.jobs.inner_loop.id}
inner_loop:
name: inner loop
`, tmpDir, "databricks.yml")
ctx := context.Background()
stdout, err := validateBundle(t, ctx, tmpDir)
require.NoError(t, err)
config := make(map[string]any)
err = json.Unmarshal(stdout, &config)
require.NoError(t, err)
getValue := func(key string) any {
v, err := convert.FromTyped(config, dyn.NilValue)
require.NoError(t, err)
v, err = dyn.GetByPath(v, dyn.MustPathFromString(key))
require.NoError(t, err)
return v.AsAny()
}
assert.Equal(t, "foobar", getValue("bundle.name"))
assert.Equal(t, "outer loop", getValue("resources.jobs.outer_loop.name"))
assert.Equal(t, "inner loop", getValue("resources.jobs.inner_loop.name"))
assert.Equal(t, "my task", getValue("resources.jobs.outer_loop.tasks[0].task_key"))
// Assert resource references are retained in the output.
assert.Equal(t, "${resources.jobs.inner_loop.id}", getValue("resources.jobs.outer_loop.tasks[0].run_job_task.job_id"))
}