2024-09-10 13:55:18 +00:00
|
|
|
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")
|
2024-10-07 15:13:42 +00:00
|
|
|
fields := []string{"name", "continuous", "tasks", "trigger"}
|
2024-09-10 13:55:18 +00:00
|
|
|
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")
|
2024-10-07 15:13:42 +00:00
|
|
|
fields = []string{"name", "catalog", "clusters", "channel", "continuous", "development"}
|
2024-09-10 13:55:18 +00:00
|
|
|
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")
|
|
|
|
}
|