mirror of https://github.com/databricks/cli.git
add self referential tesT
This commit is contained in:
parent
08133126ae
commit
7c70179091
|
@ -9,23 +9,9 @@ import (
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Add a test that checks the primitive overrides for reference regexs wor.
|
// TODO: Add a test that checks the primitive overrides for reference regexs work.
|
||||||
|
// Basically that the custom override for bundle regex works.
|
||||||
|
|
||||||
func TestErrorWithTrace(t *testing.T) {
|
|
||||||
tracker := newTracker()
|
|
||||||
dummyType := reflect.TypeOf(struct{}{})
|
|
||||||
err := tracker.errWithTrace("with empty trace", "root")
|
|
||||||
assert.ErrorContains(t, err, "with empty trace. traversal trace: root")
|
|
||||||
|
|
||||||
tracker.push(dummyType, "resources")
|
|
||||||
err = tracker.errWithTrace("with depth = 1", "root")
|
|
||||||
assert.ErrorContains(t, err, "with depth = 1. traversal trace: root -> resources")
|
|
||||||
|
|
||||||
tracker.push(dummyType, "pipelines")
|
|
||||||
tracker.push(dummyType, "datasets")
|
|
||||||
err = tracker.errWithTrace("with depth = 4", "root")
|
|
||||||
assert.ErrorContains(t, err, "with depth = 4. traversal trace: root -> resources -> pipelines -> datasets")
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGenericSchema(t *testing.T) {
|
func TestGenericSchema(t *testing.T) {
|
||||||
type Person struct {
|
type Person struct {
|
||||||
|
@ -599,20 +585,3 @@ func TestErrorIfStructRefersToItself(t *testing.T) {
|
||||||
_, err := New(reflect.TypeOf(elem), nil)
|
_, err := New(reflect.TypeOf(elem), nil)
|
||||||
assert.ErrorContains(t, err, "cycle detected. traversal trace: root -> my_foo")
|
assert.ErrorContains(t, err, "cycle detected. traversal trace: root -> my_foo")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestErrorIfStructHasLoop(t *testing.T) {
|
|
||||||
type Apple struct {
|
|
||||||
MyVal int `json:"my_val"`
|
|
||||||
MyMango struct {
|
|
||||||
MyGuava struct {
|
|
||||||
MyPapaya struct {
|
|
||||||
MyApple *Apple `json:"my_apple"`
|
|
||||||
} `json:"my_papaya"`
|
|
||||||
} `json:"my_guava"`
|
|
||||||
} `json:"my_mango"`
|
|
||||||
}
|
|
||||||
|
|
||||||
elem := Apple{}
|
|
||||||
_, err := New(reflect.TypeOf(elem), nil)
|
|
||||||
assert.ErrorContains(t, err, "cycle detected. traversal trace: root -> my_mango -> my_guava -> my_papaya -> my_apple")
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package jsonschema
|
package jsonschema
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -314,12 +313,69 @@ func TestFromTypeRecursive(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, expected, s)
|
assert.Equal(t, expected, s)
|
||||||
|
|
||||||
jsonSchema, err := json.MarshalIndent(s, " ", " ")
|
// jsonSchema, err := json.MarshalIndent(s, " ", " ")
|
||||||
assert.NoError(t, err)
|
// assert.NoError(t, err)
|
||||||
|
|
||||||
expectedJson, err := json.MarshalIndent(expected, " ", " ")
|
// expectedJson, err := json.MarshalIndent(expected, " ", " ")
|
||||||
assert.NoError(t, err)
|
// assert.NoError(t, err)
|
||||||
|
|
||||||
t.Log("[DEBUG] actual: ", string(jsonSchema))
|
// t.Log("[DEBUG] actual: ", string(jsonSchema))
|
||||||
t.Log("[DEBUG] expected: ", string(expectedJson))
|
// t.Log("[DEBUG] expected: ", string(expectedJson))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFromTypeSelfReferential(t *testing.T) {
|
||||||
|
selfRef := "#/$defs/github.com/databricks/cli/libs/jsonschema/test_types.Self"
|
||||||
|
stringRef := "#/$defs/string"
|
||||||
|
|
||||||
|
expected := Schema{
|
||||||
|
Type: "object",
|
||||||
|
Definitions: map[string]any{
|
||||||
|
"github.com": map[string]any{
|
||||||
|
"databricks": map[string]any{
|
||||||
|
"cli": map[string]any{
|
||||||
|
"libs": map[string]any{
|
||||||
|
"jsonschema": map[string]any{
|
||||||
|
"test_types.Self": Schema{
|
||||||
|
Type: "object",
|
||||||
|
Properties: map[string]*Schema{
|
||||||
|
"self": {
|
||||||
|
Reference: &selfRef,
|
||||||
|
},
|
||||||
|
"s": {
|
||||||
|
Reference: &stringRef,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
AdditionalProperties: false,
|
||||||
|
Required: []string{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"string": Schema{
|
||||||
|
Type: "string",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Properties: map[string]*Schema{
|
||||||
|
"self": {
|
||||||
|
Reference: &selfRef,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
AdditionalProperties: false,
|
||||||
|
Required: []string{},
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := FromType(reflect.TypeOf(test_types.OuterSelf{}), nil)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, expected, s)
|
||||||
|
|
||||||
|
// jsonSchema, err := json.MarshalIndent(s, " ", " ")
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
|
||||||
|
// expectedJson, err := json.MarshalIndent(expected, " ", " ")
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
|
||||||
|
// t.Log("[DEBUG] actual: ", string(jsonSchema))
|
||||||
|
// t.Log("[DEBUG] expected: ", string(expectedJson))
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,3 +13,13 @@ type Bar struct {
|
||||||
type Outer struct {
|
type Outer struct {
|
||||||
Foo Foo `json:"foo"`
|
Foo Foo `json:"foo"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Self struct {
|
||||||
|
Self *Self `json:"self,omitempty"`
|
||||||
|
|
||||||
|
S string `json:"s,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type OuterSelf struct {
|
||||||
|
Self Self `json:"self,omitempty"`
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue