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")) }