335 lines
10 KiB
Go
335 lines
10 KiB
Go
// Copyright 2017 go-swagger maintainers
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package spec
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var testJsonSchema = `{
|
|
"id": "http://json-schema.org/draft-04/schema#",
|
|
"$schema": "http://json-schema.org/draft-04/schema#",
|
|
"description": "Core schema meta-schema",
|
|
"definitions": {
|
|
"schemaArray": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#" }
|
|
},
|
|
"positiveInteger": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"positiveIntegerDefault0": {
|
|
"allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
|
|
},
|
|
"simpleTypes": {
|
|
"enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
|
|
},
|
|
"stringArray": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"minItems": 1,
|
|
"uniqueItems": true
|
|
}
|
|
},
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"$schema": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"default": {},
|
|
"multipleOf": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"exclusiveMinimum": true
|
|
},
|
|
"maximum": {
|
|
"type": "number"
|
|
},
|
|
"exclusiveMaximum": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"minimum": {
|
|
"type": "number"
|
|
},
|
|
"exclusiveMinimum": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"maxLength": { "$ref": "#/definitions/positiveInteger" },
|
|
"minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
|
"pattern": {
|
|
"type": "string",
|
|
"format": "regex"
|
|
},
|
|
"additionalItems": {
|
|
"anyOf": [
|
|
{ "type": "boolean" },
|
|
{ "$ref": "#" }
|
|
],
|
|
"default": {}
|
|
},
|
|
"items": {
|
|
"anyOf": [
|
|
{ "$ref": "#" },
|
|
{ "$ref": "#/definitions/schemaArray" }
|
|
],
|
|
"default": {}
|
|
},
|
|
"maxItems": { "$ref": "#/definitions/positiveInteger" },
|
|
"minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
|
"uniqueItems": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"maxProperties": { "$ref": "#/definitions/positiveInteger" },
|
|
"minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
|
"required": { "$ref": "#/definitions/stringArray" },
|
|
"additionalProperties": {
|
|
"anyOf": [
|
|
{ "type": "boolean" },
|
|
{ "$ref": "#" }
|
|
],
|
|
"default": {}
|
|
},
|
|
"definitions": {
|
|
"type": "object",
|
|
"additionalProperties": { "$ref": "#" },
|
|
"default": {}
|
|
},
|
|
"properties": {
|
|
"type": "object",
|
|
"additionalProperties": { "$ref": "#" },
|
|
"default": {}
|
|
},
|
|
"patternProperties": {
|
|
"type": "object",
|
|
"additionalProperties": { "$ref": "#" },
|
|
"default": {}
|
|
},
|
|
"dependencies": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"anyOf": [
|
|
{ "$ref": "#" },
|
|
{ "$ref": "#/definitions/stringArray" }
|
|
]
|
|
}
|
|
},
|
|
"enum": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"uniqueItems": true
|
|
},
|
|
"type": {
|
|
"anyOf": [
|
|
{ "$ref": "#/definitions/simpleTypes" },
|
|
{
|
|
"type": "array",
|
|
"items": { "$ref": "#/definitions/simpleTypes" },
|
|
"minItems": 1,
|
|
"uniqueItems": true
|
|
}
|
|
]
|
|
},
|
|
"allOf": { "$ref": "#/definitions/schemaArray" },
|
|
"anyOf": { "$ref": "#/definitions/schemaArray" },
|
|
"oneOf": { "$ref": "#/definitions/schemaArray" },
|
|
"not": { "$ref": "#" }
|
|
},
|
|
"dependencies": {
|
|
"exclusiveMaximum": [ "maximum" ],
|
|
"exclusiveMinimum": [ "minimum" ]
|
|
},
|
|
"default": {}
|
|
}
|
|
`
|
|
|
|
var modifiedTestJsonSchema = `{
|
|
"id": "http://json-schema.org/draft-04/schema#",
|
|
"$schema": "http://json-schema.org/draft-04/schema",
|
|
"description": "Core schema meta-schema",
|
|
"definitions": {
|
|
"schemaArray": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "" }
|
|
},
|
|
"positiveInteger": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"positiveIntegerDefault0": {
|
|
"allOf": [ { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger" }, { "default": 0 } ]
|
|
},
|
|
"simpleTypes": {
|
|
"enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
|
|
},
|
|
"stringArray": {
|
|
"type": "array",
|
|
"items": { "type": "string" },
|
|
"minItems": 1,
|
|
"uniqueItems": true
|
|
}
|
|
},
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"$schema": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"default": {},
|
|
"multipleOf": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"exclusiveMinimum": true
|
|
},
|
|
"maximum": {
|
|
"type": "number"
|
|
},
|
|
"exclusiveMaximum": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"minimum": {
|
|
"type": "number"
|
|
},
|
|
"exclusiveMinimum": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"maxLength": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger" },
|
|
"minLength": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0" },
|
|
"pattern": {
|
|
"type": "string",
|
|
"format": "regex"
|
|
},
|
|
"additionalItems": {
|
|
"anyOf": [
|
|
{ "type": "boolean" },
|
|
{ "$ref": "" }
|
|
],
|
|
"default": {}
|
|
},
|
|
"items": {
|
|
"anyOf": [
|
|
{ "$ref": "" },
|
|
{ "$ref": "http://json-schema.org/draft-04/schema#/definitions/schemaArray" }
|
|
],
|
|
"default": {}
|
|
},
|
|
"maxItems": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger" },
|
|
"minItems": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0" },
|
|
"uniqueItems": {
|
|
"type": "boolean",
|
|
"default": false
|
|
},
|
|
"maxProperties": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger" },
|
|
"minProperties": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0" },
|
|
"required": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" },
|
|
"additionalProperties": {
|
|
"anyOf": [
|
|
{ "type": "boolean" },
|
|
{ "$ref": "" }
|
|
],
|
|
"default": {}
|
|
},
|
|
"definitions": {
|
|
"type": "object",
|
|
"additionalProperties": { "$ref": "" },
|
|
"default": {}
|
|
},
|
|
"properties": {
|
|
"type": "object",
|
|
"additionalProperties": { "$ref": "" },
|
|
"default": {}
|
|
},
|
|
"patternProperties": {
|
|
"type": "object",
|
|
"additionalProperties": { "$ref": "" },
|
|
"default": {}
|
|
},
|
|
"dependencies": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"anyOf": [
|
|
{ "$ref": "" },
|
|
{ "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray" }
|
|
]
|
|
}
|
|
},
|
|
"enum": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"uniqueItems": true
|
|
},
|
|
"type": {
|
|
"anyOf": [
|
|
{ "$ref": "http://json-schema.org/draft-04/schema#/definitions/simpleTypes" },
|
|
{
|
|
"type": "array",
|
|
"items": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/simpleTypes" },
|
|
"minItems": 1,
|
|
"uniqueItems": true
|
|
}
|
|
]
|
|
},
|
|
"allOf": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/schemaArray" },
|
|
"anyOf": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/schemaArray" },
|
|
"oneOf": { "$ref": "http://json-schema.org/draft-04/schema#/definitions/schemaArray" },
|
|
"not": { "$ref": "" }
|
|
},
|
|
"dependencies": {
|
|
"exclusiveMaximum": [ "maximum" ],
|
|
"exclusiveMinimum": [ "minimum" ]
|
|
},
|
|
"default": {}
|
|
}
|
|
`
|
|
|
|
func TestRefModifier(t *testing.T) {
|
|
sch := Schema{}
|
|
assert.NoError(t, json.Unmarshal([]byte(testJsonSchema), &sch))
|
|
modifyRefs(&sch, "http://json-schema.org/draft-04/schema")
|
|
b, err := sch.MarshalJSON()
|
|
assert.NoError(t, err)
|
|
assert.JSONEq(t, modifiedTestJsonSchema, string(b))
|
|
}
|