mirror of
https://github.com/koreader/koreader
synced 2024-11-04 12:00:25 +00:00
125 lines
3.8 KiB
Lua
125 lines
3.8 KiB
Lua
local service = [[
|
|
{
|
|
"base_url" : "http://httpbin.org",
|
|
"name" : "api",
|
|
"methods" : {
|
|
"get_info" : {
|
|
"path" : "/get",
|
|
"method" : "GET",
|
|
"required_params" : [
|
|
"user"
|
|
],
|
|
"optional_params" : [
|
|
"age"
|
|
],
|
|
},
|
|
"post_info" : {
|
|
"path" : "/post",
|
|
"method" : "POST",
|
|
"required_params" : [
|
|
"user"
|
|
],
|
|
"optional_params" : [
|
|
"age"
|
|
],
|
|
"payload" : [
|
|
"user",
|
|
"age",
|
|
],
|
|
},
|
|
}
|
|
}
|
|
]]
|
|
|
|
describe("Lua Spore modules #notest #nocov", function()
|
|
local Spore, client
|
|
setup(function()
|
|
require("commonrequire")
|
|
Spore = require("Spore")
|
|
client = Spore.new_from_string(service)
|
|
client:enable('Format.JSON')
|
|
end)
|
|
|
|
it("should complete GET request", function()
|
|
local info = {user = 'john', age = '25'}
|
|
local res = client:get_info(info)
|
|
assert.are.same(res.body.args, info)
|
|
end)
|
|
|
|
it("should complete POST request", function()
|
|
local info = {user = 'sam', age = '26'}
|
|
local res = client:post_info(info)
|
|
assert.are.same(res.body.json, info)
|
|
end)
|
|
end)
|
|
|
|
describe("Lua Spore modules with async http request #notest #nocov", function()
|
|
local client, UIManager
|
|
|
|
setup(function()
|
|
require("commonrequire")
|
|
UIManager = require("ui/uimanager")
|
|
local HTTPClient = require("httpclient")
|
|
local Spore = require("Spore")
|
|
client = Spore.new_from_string(service)
|
|
local async_http_client = HTTPClient:new()
|
|
package.loaded['Spore.Middleware.AsyncHTTP'] = {}
|
|
require('Spore.Middleware.AsyncHTTP').call = function(args, req)
|
|
req:finalize()
|
|
local result
|
|
async_http_client:request({
|
|
url = req.url,
|
|
method = req.method,
|
|
body = req.env.spore.payload,
|
|
on_headers = function(headers)
|
|
for header, value in pairs(req.headers) do
|
|
if type(header) == 'string' then
|
|
headers:add(header, value)
|
|
end
|
|
end
|
|
end,
|
|
}, function(res)
|
|
result = res
|
|
-- Turbo HTTP client uses code instead of status
|
|
-- change to status so that Spore can understand
|
|
result.status = res.code
|
|
coroutine.resume(args.thread)
|
|
UIManager.INPUT_TIMEOUT = 100 -- no need in production
|
|
end)
|
|
return coroutine.create(function() coroutine.yield(result) end)
|
|
end
|
|
end)
|
|
|
|
it("should complete GET request", function()
|
|
UIManager:quit()
|
|
local co = coroutine.create(function()
|
|
local info = {user = 'john', age = '25'}
|
|
local res = client:get_info(info)
|
|
UIManager:quit()
|
|
assert.are.same(res.body.args, info)
|
|
end)
|
|
client:reset_middlewares()
|
|
client:enable("Format.JSON")
|
|
client:enable("AsyncHTTP", {thread = co})
|
|
coroutine.resume(co)
|
|
UIManager:setRunForeverMode()
|
|
UIManager:run()
|
|
end)
|
|
|
|
it("should complete POST request", function()
|
|
UIManager:quit()
|
|
local co = coroutine.create(function()
|
|
local info = {user = 'sam', age = '26'}
|
|
local res = client:post_info(info)
|
|
UIManager:quit()
|
|
assert.are.same(res.body.json, info)
|
|
end)
|
|
client:reset_middlewares()
|
|
client:enable("Format.JSON")
|
|
client:enable("AsyncHTTP", {thread = co})
|
|
coroutine.resume(co)
|
|
UIManager:setRunForeverMode()
|
|
UIManager:run()
|
|
end)
|
|
end)
|