databricks-cli/libs/dyn/jsonloader/json_test.go

94 lines
2.2 KiB
Go

package jsonloader
import (
"testing"
"github.com/databricks/cli/libs/dyn/convert"
"github.com/databricks/cli/libs/dyn/dynassert"
"github.com/databricks/databricks-sdk-go/service/jobs"
)
const jsonData = `
{
"job_id": 123,
"new_settings": {
"name": "xxx",
"email_notifications": {
"on_start": [],
"on_success": [],
"on_failure": []
},
"webhook_notifications": {
"on_start": [],
"on_failure": []
},
"notification_settings": {
"no_alert_for_skipped_runs": true,
"no_alert_for_canceled_runs": true
},
"timeout_seconds": 0,
"max_concurrent_runs": 1,
"tasks": [
{
"task_key": "xxx",
"email_notifications": {},
"notification_settings": {},
"timeout_seconds": 0,
"max_retries": 0,
"min_retry_interval_millis": 0,
"retry_on_timeout": "true"
}
]
}
}
`
func TestJsonLoader(t *testing.T) {
v, err := LoadJSON([]byte(jsonData), "(inline)")
dynassert.NoError(t, err)
var r jobs.ResetJob
err = convert.ToTyped(&r, v)
dynassert.NoError(t, err)
}
const malformedMap = `
{
"job_id": 123,
"new_settings": {
"name": "xxx",
"wrong",
}
}
`
func TestJsonLoaderMalformedMap(t *testing.T) {
_, err := LoadJSON([]byte(malformedMap), "(inline)")
dynassert.ErrorContains(t, err, "error decoding JSON at (inline):6:16: invalid character ',' after object key")
}
const malformedArray = `
{
"job_id": 123,
"new_settings": {
"name": "xxx",
"tasks": [1, "asd",]
}
}`
func TestJsonLoaderMalformedArray(t *testing.T) {
_, err := LoadJSON([]byte(malformedArray), "path/to/file.json")
dynassert.ErrorContains(t, err, "error decoding JSON at path/to/file.json:6:28: invalid character ']' looking for beginning of value")
}
const eofData = `
{
"job_id": 123,
"new_settings": {
"name": "xxx",`
func TestJsonLoaderEOF(t *testing.T) {
_, err := LoadJSON([]byte(eofData), "path/to/file.json")
dynassert.ErrorContains(t, err, "unexpected end of JSON input")
}