func TestSchemaAnalysis_TupleWithExtra(t *testing.T) { at := spec.ArrayProperty(nil) at.Items = &spec.SchemaOrArray{} at.Items.Schemas = append(at.Items.Schemas, *spec.StringProperty(), *spec.Int64Property()) at.AdditionalItems = &spec.SchemaOrBool{Allows: true} at.AdditionalItems.Schema = spec.Int32Property() sch, err := Schema(SchemaOpts{Schema: at}) if assert.NoError(t, err) { assert.False(t, sch.IsTuple) assert.True(t, sch.IsTupleWithExtra) assert.False(t, sch.IsKnownType) assert.False(t, sch.IsSimpleSchema) } }
func TestTypeResolver_AnonymousStructs(t *testing.T) { _, resolver, err := basicTaskListResolver(t) if assert.NoError(t, err) { // anonymous structs should be accounted for parent := new(spec.Schema) parent.Typed("object", "") parent.Properties = make(map[string]spec.Schema) parent.Properties["name"] = *spec.StringProperty() parent.Properties["age"] = *spec.Int32Property() rt, err := resolver.ResolveSchema(parent, true, true) if assert.NoError(t, err) { assert.True(t, rt.IsNullable) assert.True(t, rt.IsAnonymous) assert.True(t, rt.IsComplexObject) } parent.Extensions = make(spec.Extensions) parent.Extensions[xIsNullable] = true rt, err = resolver.ResolveSchema(parent, true, true) if assert.NoError(t, err) { assert.True(t, rt.IsNullable) assert.True(t, rt.IsAnonymous) assert.True(t, rt.IsComplexObject) } // Also test that it's nullable with just x-nullable parent.Extensions[xIsNullable] = false parent.Extensions[xNullable] = false rt, err = resolver.ResolveSchema(parent, true, true) if assert.NoError(t, err) { assert.True(t, rt.IsNullable) assert.True(t, rt.IsAnonymous) assert.True(t, rt.IsComplexObject) } } }
"path" "testing" "net/http" "net/http/httptest" "github.com/go-openapi/spec" "github.com/stretchr/testify/assert" ) var knownSchemas = []*spec.Schema{ spec.BoolProperty(), // 0 spec.StringProperty(), // 1 spec.Int8Property(), // 2 spec.Int16Property(), // 3 spec.Int32Property(), // 4 spec.Int64Property(), // 5 spec.Float32Property(), // 6 spec.Float64Property(), // 7 spec.DateProperty(), // 8 spec.DateTimeProperty(), // 9 (&spec.Schema{}), // 10 (&spec.Schema{}).Typed("object", ""), // 11 (&spec.Schema{}).Typed("", ""), // 12 (&spec.Schema{}).Typed("", "uuid"), // 13 } func newCObj() *spec.Schema { return (&spec.Schema{}).Typed("object", "").SetProperty("id", *spec.Int64Property()) }
func TestTypeResolver_AdditionalProperties(t *testing.T) { _, resolver, err := basicTaskListResolver(t) if assert.NoError(t, err) { // primitives as additional properties for _, val := range schTypeVals { sch := new(spec.Schema) sch.Typed(val.Type, val.Format) parent := new(spec.Schema) parent.AdditionalProperties = new(spec.SchemaOrBool) parent.AdditionalProperties.Schema = sch rt, err := resolver.ResolveSchema(parent, true, false) if assert.NoError(t, err) { assert.True(t, rt.IsMap) assert.False(t, rt.IsComplexObject) assert.Equal(t, "map[string]"+val.Expected, rt.GoType) assert.Equal(t, "object", rt.SwaggerType) } } // array of primitives as additional properties for _, val := range schTypeVals { sch := new(spec.Schema) sch.Typed(val.Type, val.Format) parent := new(spec.Schema) parent.AdditionalProperties = new(spec.SchemaOrBool) parent.AdditionalProperties.Schema = new(spec.Schema).CollectionOf(*sch) rt, err := resolver.ResolveSchema(parent, true, false) if assert.NoError(t, err) { assert.True(t, rt.IsMap) assert.False(t, rt.IsComplexObject) assert.Equal(t, "map[string][]"+val.Expected, rt.GoType) assert.Equal(t, "object", rt.SwaggerType) } } // refs as additional properties for _, val := range schRefVals { sch := new(spec.Schema) sch.Ref, _ = spec.NewRef("#/definitions/" + val.Type) parent := new(spec.Schema) parent.AdditionalProperties = new(spec.SchemaOrBool) parent.AdditionalProperties.Schema = sch rt, err := resolver.ResolveSchema(parent, true, true) if assert.NoError(t, err) { assert.True(t, rt.IsMap) assert.False(t, rt.IsComplexObject) assert.Equal(t, "map[string]"+val.Expected, rt.GoType) assert.Equal(t, "object", rt.SwaggerType) } } // when additional properties and properties present, it's a complex object // primitives as additional properties for _, val := range schTypeVals { sch := new(spec.Schema) sch.Typed(val.Type, val.Format) parent := new(spec.Schema) parent.Properties = make(map[string]spec.Schema) parent.Properties["id"] = *spec.Int32Property() parent.AdditionalProperties = new(spec.SchemaOrBool) parent.AdditionalProperties.Schema = sch rt, err := resolver.ResolveSchema(parent, true, true) if assert.NoError(t, err) { assert.True(t, rt.IsComplexObject) assert.False(t, rt.IsMap) assert.Equal(t, "map[string]"+val.Expected, rt.GoType) assert.Equal(t, "object", rt.SwaggerType) } } // array of primitives as additional properties for _, val := range schTypeVals { sch := new(spec.Schema) sch.Typed(val.Type, val.Format) parent := new(spec.Schema) parent.Properties = make(map[string]spec.Schema) parent.Properties["id"] = *spec.Int32Property() parent.AdditionalProperties = new(spec.SchemaOrBool) parent.AdditionalProperties.Schema = new(spec.Schema).CollectionOf(*sch) rt, err := resolver.ResolveSchema(parent, true, true) if assert.NoError(t, err) { assert.True(t, rt.IsComplexObject) assert.False(t, rt.IsMap) assert.Equal(t, "map[string][]"+val.Expected, rt.GoType) assert.Equal(t, "object", rt.SwaggerType) } } // refs as additional properties for _, val := range schRefVals { sch := new(spec.Schema) sch.Ref, _ = spec.NewRef("#/definitions/" + val.Type) parent := new(spec.Schema) parent.Properties = make(map[string]spec.Schema) parent.Properties["id"] = *spec.Int32Property() parent.AdditionalProperties = new(spec.SchemaOrBool) parent.AdditionalProperties.Schema = sch rt, err := resolver.ResolveSchema(parent, true, true) if assert.NoError(t, err) { assert.True(t, rt.IsComplexObject) assert.False(t, rt.IsMap) assert.Equal(t, "map[string]"+val.Expected, rt.GoType) assert.Equal(t, "object", rt.SwaggerType) } } } }