diff --git a/bundle/schema/embed_test.go b/bundle/schema/embed_test.go new file mode 100644 index 000000000..ee0b5a615 --- /dev/null +++ b/bundle/schema/embed_test.go @@ -0,0 +1,71 @@ +package schema_test + +import ( + "encoding/json" + "testing" + + "github.com/databricks/cli/bundle/schema" + "github.com/databricks/cli/libs/jsonschema" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func walk(defs map[string]any, p ...string) jsonschema.Schema { + v, ok := defs[p[0]] + if !ok { + panic("not found: " + p[0]) + } + + if len(p) == 1 { + b, err := json.Marshal(v) + if err != nil { + panic(err) + } + res := jsonschema.Schema{} + err = json.Unmarshal(b, &res) + if err != nil { + panic(err) + } + return res + } + + return walk(v.(map[string]any), p[1:]...) +} + +func TestJsonSchema(t *testing.T) { + s := jsonschema.Schema{} + err := json.Unmarshal(schema.Bytes, &s) + require.NoError(t, err) + + // Assert job fields have their descriptions loaded. + resourceJob := walk(s.Definitions, "github.com", "databricks", "cli", "bundle", "config", "resources.Job") + fields := []string{"name", "continuous", "deployment", "tasks", "trigger"} + for _, field := range fields { + assert.NotEmpty(t, resourceJob.AnyOf[0].Properties[field].Description) + } + + // Assert descriptions were also loaded for a job task definition. + jobTask := walk(s.Definitions, "github.com", "databricks", "databricks-sdk-go", "service", "jobs.Task") + fields = []string{"notebook_task", "spark_jar_task", "spark_python_task", "spark_submit_task", "description", "depends_on", "environment_key", "for_each_task", "existing_cluster_id"} + for _, field := range fields { + assert.NotEmpty(t, jobTask.AnyOf[0].Properties[field].Description) + } + + // Assert descriptions are loaded for pipelines + pipeline := walk(s.Definitions, "github.com", "databricks", "cli", "bundle", "config", "resources.Pipeline") + fields = []string{"name", "catalog", "clusters", "channel", "continuous", "deployment", "development"} + for _, field := range fields { + assert.NotEmpty(t, pipeline.AnyOf[0].Properties[field].Description) + } + + // Assert enum values are loaded + schedule := walk(s.Definitions, "github.com", "databricks", "databricks-sdk-go", "service", "catalog.MonitorCronSchedule") + assert.Contains(t, schedule.AnyOf[0].Properties["pause_status"].Enum, "PAUSED") + assert.Contains(t, schedule.AnyOf[0].Properties["pause_status"].Enum, "UNPAUSED") + + providers := walk(s.Definitions, "github.com", "databricks", "databricks-sdk-go", "service", "jobs.GitProvider") + assert.Contains(t, providers.Enum, "gitHub") + assert.Contains(t, providers.Enum, "bitbucketCloud") + assert.Contains(t, providers.Enum, "gitHubEnterprise") + assert.Contains(t, providers.Enum, "bitbucketServer") +}