blob: cf9a565737e6e9faea867740d9c63822869dc84b [file] [log] [blame]
--
-- Licensed to the Apache Software Foundation (ASF) under one or more
-- contributor license agreements. See the NOTICE file distributed with
-- this work for additional information regarding copyright ownership.
-- The ASF licenses this file to You 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.
--
local cjson = require 'cjson'
local lfs = require 'lfs'
local swagger = require 'management/lib/swagger'
local exampleBasePath = lfs.currentdir() .. '/scripts/lua/management/examples/'
describe('Testing v2 management interface', function()
it('should parse native swagger correctly', function()
local expected = cjson.decode([[
{
"basePath": "/native",
"name": "Hello World API",
"resources": {
"/hello": {
"cors": {
"origin": "true"
},
"operations": {
"get": {
"backendUrl": "https://appconnect.mybluemix.net",
"policies": [
{
"type": "rateLimit",
"value": {
"scope": "api",
"subscription": true,
"interval": 180,
"rate": 100
}
}
],
"security": [
{
"type": "apiKey",
"header": "X-Api-Key",
"scope": "api"
}
],
"backendMethod": "get"
}
}
}
}
}
]])
local jsonPath = exampleBasePath .. 'example1.json'
local jsonTable = loadJsonTable(jsonPath)
local actual = swagger.parseSwagger(jsonTable)
assert.are.same(expected, actual)
end)
it('should parse whisk swagger correctly', function()
local expected = cjson.decode([[
{
"basePath": "/whisk",
"name": "Hello World API",
"resources": {
"/hello": {
"operations": {
"post": {
"backendUrl": "https://openwhisk.ng.bluemix.net/api/user@us.ibm.com/demo/createuser",
"policies": [
{
"type": "rateLimit",
"value": {
"scope": "api",
"subscription": "true",
"interval": 180,
"rate": 100
}
},
{
"type": "reqMapping",
"value": [{
"from": {
"value": "Basic xxx"
},
"to": {
"name": "Authorization",
"location": "header"
},
"action": "insert"
}]
}
],
"security": [
{
"type": "clientSecret",
"scope": "api",
"idFieldName":"X-Api-Key",
"secretFieldName":"X-Api-Secret"
}
],
"backendMethod": "post"
},
"get": {
"backendUrl": "https://openwhisk.ng.bluemix.net/api/some/action/path.http",
"policies": [
{
"type": "rateLimit",
"value": {
"scope": "api",
"subscription": "true",
"interval": 180,
"rate": 100
}
},
{
"type": "reqMapping",
"value": [{
"from": {
"value": "Basic xxx"
},
"to": {
"name": "Authorization",
"location": "header"
},
"action": "insert"
}]
}
],
"security": [
{
"type": "oauth2",
"provider": "google",
"scope": "api"
},
{
"type": "apiKey",
"header": "X-Api-Key",
"scope": "api"
}
],
"backendMethod": "get"
}
}
}
}
}
]])
local jsonPath = exampleBasePath .. 'example2.json'
local jsonTable = loadJsonTable(jsonPath)
local actual = swagger.parseSwagger(jsonTable)
assert.are.same(expected.resources["/hello"].operations.post.policies[2].value, actual.resources["/hello"].operations.post.policies[2].value)
end)
end)
function loadJsonTable(path)
local contents
local file = io.open(path, "r" )
if file then
contents = file:read("*a")
local decoded = cjson.decode(contents)
io.close( file )
return decoded
end
return nil
end