mirror of
https://github.com/cloudnativelabs/kube-router.git
synced 2025-10-13 02:41:05 +02:00
340 lines
7.2 KiB
Go
340 lines
7.2 KiB
Go
package loads
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestUnknownSpecVersion(t *testing.T) {
|
|
_, err := Analyzed([]byte{}, "0.9")
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestDefaultsTo20(t *testing.T) {
|
|
d, err := Analyzed(PetStoreJSONMessage, "")
|
|
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, d)
|
|
assert.Equal(t, "2.0", d.Version())
|
|
// assert.Equal(t, "2.0", d.data["swagger"].(string))
|
|
assert.Equal(t, "/api", d.BasePath())
|
|
}
|
|
|
|
// func TestValidatesValidSchema(t *testing.T) {
|
|
// d, err := New(testingutil.PetStoreJSONMessage, "")
|
|
|
|
// assert.NoError(t, err)
|
|
// assert.NotNil(t, d)
|
|
// res := d.Validate()
|
|
// assert.NotNil(t, res)
|
|
// assert.True(t, res.Valid())
|
|
// assert.Empty(t, res.Errors())
|
|
|
|
// }
|
|
|
|
// func TestFailsInvalidSchema(t *testing.T) {
|
|
// d, err := New(testingutil.InvalidJSONMessage, "")
|
|
|
|
// assert.NoError(t, err)
|
|
// assert.NotNil(t, d)
|
|
|
|
// res := d.Validate()
|
|
// assert.NotNil(t, res)
|
|
// assert.False(t, res.Valid())
|
|
// assert.NotEmpty(t, res.Errors())
|
|
// }
|
|
|
|
func TestFailsInvalidJSON(t *testing.T) {
|
|
_, err := Analyzed(json.RawMessage([]byte("{]")), "")
|
|
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
// PetStoreJSONMessage json raw message for Petstore20
|
|
var PetStoreJSONMessage = json.RawMessage([]byte(PetStore20))
|
|
|
|
// PetStore20 json doc for swagger 2.0 pet store
|
|
const PetStore20 = `{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"version": "1.0.0",
|
|
"title": "Swagger Petstore",
|
|
"contact": {
|
|
"name": "Wordnik API Team",
|
|
"url": "http://developer.wordnik.com"
|
|
},
|
|
"license": {
|
|
"name": "Creative Commons 4.0 International",
|
|
"url": "http://creativecommons.org/licenses/by/4.0/"
|
|
}
|
|
},
|
|
"host": "petstore.swagger.wordnik.com",
|
|
"basePath": "/api",
|
|
"schemes": [
|
|
"http"
|
|
],
|
|
"paths": {
|
|
"/pets": {
|
|
"get": {
|
|
"security": [
|
|
{
|
|
"basic": []
|
|
}
|
|
],
|
|
"tags": [ "Pet Operations" ],
|
|
"operationId": "getAllPets",
|
|
"parameters": [
|
|
{
|
|
"name": "status",
|
|
"in": "query",
|
|
"description": "The status to filter by",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"description": "The maximum number of results to return",
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
],
|
|
"summary": "Finds all pets in the system",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Pet response",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/Pet"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Unexpected error",
|
|
"schema": {
|
|
"$ref": "#/definitions/Error"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"security": [
|
|
{
|
|
"basic": []
|
|
}
|
|
],
|
|
"tags": [ "Pet Operations" ],
|
|
"operationId": "createPet",
|
|
"summary": "Creates a new pet",
|
|
"consumes": ["application/x-yaml"],
|
|
"produces": ["application/x-yaml"],
|
|
"parameters": [
|
|
{
|
|
"name": "pet",
|
|
"in": "body",
|
|
"description": "The Pet to create",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/newPet"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Created Pet response",
|
|
"schema": {
|
|
"$ref": "#/definitions/Pet"
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Unexpected error",
|
|
"schema": {
|
|
"$ref": "#/definitions/Error"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/pets/{id}": {
|
|
"delete": {
|
|
"security": [
|
|
{
|
|
"apiKey": []
|
|
}
|
|
],
|
|
"description": "Deletes the Pet by id",
|
|
"operationId": "deletePet",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"description": "ID of pet to delete",
|
|
"required": true,
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "pet deleted"
|
|
},
|
|
"default": {
|
|
"description": "unexpected error",
|
|
"schema": {
|
|
"$ref": "#/definitions/Error"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"get": {
|
|
"tags": [ "Pet Operations" ],
|
|
"operationId": "getPetById",
|
|
"summary": "Finds the pet by id",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Pet response",
|
|
"schema": {
|
|
"$ref": "#/definitions/Pet"
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Unexpected error",
|
|
"schema": {
|
|
"$ref": "#/definitions/Error"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"description": "ID of pet",
|
|
"required": true,
|
|
"type": "integer",
|
|
"format": "int64"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"definitions": {
|
|
"Category": {
|
|
"id": "Category",
|
|
"properties": {
|
|
"id": {
|
|
"format": "int64",
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"Pet": {
|
|
"id": "Pet",
|
|
"properties": {
|
|
"category": {
|
|
"$ref": "#/definitions/Category"
|
|
},
|
|
"id": {
|
|
"description": "unique identifier for the pet",
|
|
"format": "int64",
|
|
"maximum": 100.0,
|
|
"minimum": 0.0,
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"photoUrls": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"status": {
|
|
"description": "pet status in the store",
|
|
"enum": [
|
|
"available",
|
|
"pending",
|
|
"sold"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"tags": {
|
|
"items": {
|
|
"$ref": "#/definitions/Tag"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name"
|
|
]
|
|
},
|
|
"newPet": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/Pet"
|
|
},
|
|
{
|
|
"required": [
|
|
"name"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"Tag": {
|
|
"id": "Tag",
|
|
"properties": {
|
|
"id": {
|
|
"format": "int64",
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"Error": {
|
|
"required": [
|
|
"code",
|
|
"message"
|
|
],
|
|
"properties": {
|
|
"code": {
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"consumes": [
|
|
"application/json",
|
|
"application/xml"
|
|
],
|
|
"produces": [
|
|
"application/json",
|
|
"application/xml",
|
|
"text/plain",
|
|
"text/html"
|
|
],
|
|
"securityDefinitions": {
|
|
"basic": {
|
|
"type": "basic"
|
|
},
|
|
"apiKey": {
|
|
"type": "apiKey",
|
|
"in": "header",
|
|
"name": "X-API-KEY"
|
|
}
|
|
}
|
|
}
|
|
`
|