Files
2026-07-13 12:32:21 +08:00

94 lines
2.4 KiB
Lua

local blueprints = require "spec.fixtures.blueprints"
local helpers = require "spec.helpers"
local cjson = require "cjson"
local function api_send(method, path, body, forced_port)
local api_client = helpers.admin_client(nil, forced_port)
local res, err = api_client:send({
method = method,
path = path,
headers = {
["Content-Type"] = "application/json"
},
body = body,
})
if not res then
api_client:close()
return nil, err
end
if res.status == 204 then
api_client:close()
return nil
end
local resbody = res:read_body()
api_client:close()
if res.status < 300 then
return cjson.decode(resbody)
end
return nil, "Error " .. tostring(res.status) .. ": " .. resbody
end
local admin_api_as_db = {}
for name, dao in pairs(helpers.db.daos) do
local admin_api_name = dao.schema.admin_api_name or name
admin_api_as_db[name] = {
insert = function(_, tbl)
return api_send("POST", "/" .. admin_api_name, tbl)
end,
remove = function(_, tbl)
return api_send("DELETE", "/" .. admin_api_name .. "/" .. tbl.id)
end,
update = function(_, id, tbl)
return api_send("PATCH", "/" .. admin_api_name .. "/" .. id, tbl)
end,
truncate = function()
repeat
local res = api_send("GET", "/" .. admin_api_name)
assert(type(res) == "table" and type(res.data) == "table")
for _, entity in ipairs(res.data) do
local _, err = admin_api_as_db[name]:remove(entity)
if err then
return nil, err
end
end
until #res.data == 0
return true
end,
}
end
admin_api_as_db["basicauth_credentials"] = {
insert = function(_, tbl)
return api_send("POST", "/consumers/" .. tbl.consumer.id .. "/basic-auth", tbl)
end,
remove = function(_, tbl)
return api_send("DELETE", "/consumers/" .. tbl.consumer.id .. "/basic-auth/" .. tbl.id)
end,
update = function(_, id, tbl)
return api_send("PATCH", "/consumers/" .. tbl.consumer.id .. "/basic-auth/" .. id, tbl)
end,
}
admin_api_as_db["targets"] = {
insert = function(_, tbl)
return api_send("POST", "/upstreams/" .. tbl.upstream.id .. "/targets", tbl)
end,
remove = function(_, tbl)
return api_send("DELETE", "/upstreams/" .. tbl.upstream.id .. "/targets/" .. tbl.id)
end,
update = function(_, id, tbl)
return api_send("PATCH", "/upstreams/" .. tbl.upstream.id .. "/targets/" .. id, tbl)
end,
}
return blueprints.new(admin_api_as_db)