mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 15:10:04 +08:00
206 lines
6.1 KiB
Lua
206 lines
6.1 KiB
Lua
|
local curl = require "plenary.curl"
|
||
|
local eq = assert.are.same
|
||
|
local incl = function(p, s)
|
||
|
return (nil ~= string.find(s, p))
|
||
|
end
|
||
|
|
||
|
describe("CURL Wrapper:", function()
|
||
|
describe("request", function() -----------------------------------------------
|
||
|
it("sends and returns table.", function()
|
||
|
eq(
|
||
|
"table",
|
||
|
type(curl.request {
|
||
|
url = "https://postman-echo.com/get",
|
||
|
method = "get",
|
||
|
accept = "application/json",
|
||
|
})
|
||
|
)
|
||
|
end)
|
||
|
|
||
|
it("should accept the url as first argument.", function()
|
||
|
local res = curl.get("https://postman-echo.com/get", {
|
||
|
accept = "application/json",
|
||
|
})
|
||
|
eq(200, res.status)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
describe("GET", function() --------------------------------------------------
|
||
|
it("sends and returns table.", function()
|
||
|
eq(
|
||
|
"table",
|
||
|
type(curl.get {
|
||
|
url = "https://postman-echo.com/get",
|
||
|
accept = "application/json",
|
||
|
})
|
||
|
)
|
||
|
end)
|
||
|
|
||
|
it("should accept the url as first argument.", function()
|
||
|
local res = curl.get("https://postman-echo.com/get", {
|
||
|
accept = "application/json",
|
||
|
})
|
||
|
eq(200, res.status) -- table has response status
|
||
|
end)
|
||
|
|
||
|
it("sends encoded URL query params.", function()
|
||
|
local query = { name = "john Doe", key = "123456" }
|
||
|
local response = curl.get("https://postman-echo.com/get", {
|
||
|
query = query,
|
||
|
})
|
||
|
|
||
|
eq(200, response.status)
|
||
|
eq(query, vim.fn.json_decode(response.body).args)
|
||
|
end)
|
||
|
|
||
|
it("downloads files to opts.output synchronously", function()
|
||
|
local file = "https://media2.giphy.com/media/bEMcuOG3hXVnihvB7x/giphy.gif"
|
||
|
local loc = "/tmp/giphy2.gif"
|
||
|
local res = curl.get(file, { output = loc })
|
||
|
|
||
|
eq(1, vim.fn.filereadable(loc), "should exists")
|
||
|
eq(200, res.status, "should return 200")
|
||
|
eq(0, res.exit, "should have exit code of 0")
|
||
|
vim.fn.delete(loc)
|
||
|
end)
|
||
|
|
||
|
it("downloads files to to opts.output asynchronous", function()
|
||
|
local res = nil
|
||
|
local succ = nil
|
||
|
local done = false
|
||
|
local file = "https://media2.giphy.com/media/notvalid.gif"
|
||
|
local loc = "/tmp/notvalid.gif"
|
||
|
|
||
|
curl.get(file, {
|
||
|
output = loc,
|
||
|
callback = function(out)
|
||
|
done = true
|
||
|
succ = out.status == 200
|
||
|
res = out
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
vim.wait(60000, function()
|
||
|
return done
|
||
|
end)
|
||
|
|
||
|
eq(403, res.status, "It should return 403")
|
||
|
assert(not succ, "It should fail")
|
||
|
|
||
|
vim.fn.delete(loc)
|
||
|
end)
|
||
|
|
||
|
it("sends with basic-auth as string", function()
|
||
|
local url = "https://postman-echo.com/basic-auth"
|
||
|
local auth, res
|
||
|
|
||
|
auth = "postman:password"
|
||
|
res = curl.get(url, { auth = auth })
|
||
|
assert(incl("authenticated.*true", res.body))
|
||
|
eq(200, res.status)
|
||
|
|
||
|
auth = "tami5:123456"
|
||
|
res = curl.get(url, { auth = auth })
|
||
|
assert(not incl("authenticated.*true", res.body), "it should fail")
|
||
|
eq(401, res.status)
|
||
|
end)
|
||
|
|
||
|
it("sends with basic-auth as table", function()
|
||
|
local url = "https://postman-echo.com/basic-auth"
|
||
|
local res = curl.get(url, { auth = { postman = "password" } })
|
||
|
assert(incl("authenticated.*true", res.body))
|
||
|
eq(200, res.status)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
describe("POST", function() --------------------------------------------------
|
||
|
it("sends raw string", function()
|
||
|
local res = curl.post("https://postman-echo.com/post", {
|
||
|
body = "John Doe",
|
||
|
})
|
||
|
assert(incl("John", res.body))
|
||
|
eq(200, res.status)
|
||
|
end)
|
||
|
|
||
|
it("sends lua table", function()
|
||
|
local res = curl.post("https://jsonplaceholder.typicode.com/posts", {
|
||
|
body = {
|
||
|
title = "Hello World",
|
||
|
body = "...",
|
||
|
},
|
||
|
})
|
||
|
eq(201, res.status)
|
||
|
end)
|
||
|
|
||
|
it("sends file", function()
|
||
|
local res = curl.post("https://postman-echo.com/post", {
|
||
|
body = "./README.md",
|
||
|
}).body
|
||
|
|
||
|
assert(incl("plenary.test_harness", res))
|
||
|
end)
|
||
|
|
||
|
it("sends and recives json body.", function()
|
||
|
local json = { title = "New", name = "YORK" }
|
||
|
local res = curl.post("https://postman-echo.com/post", {
|
||
|
body = vim.fn.json_encode(json),
|
||
|
headers = {
|
||
|
content_type = "application/json",
|
||
|
},
|
||
|
}).body
|
||
|
eq(json, vim.fn.json_decode(res).json)
|
||
|
end)
|
||
|
|
||
|
it("should not include the body twice", function()
|
||
|
local json = { title = "New", name = "YORK" }
|
||
|
local body = vim.fn.json_encode(json)
|
||
|
local res = curl.post("https://postman-echo.com/post", {
|
||
|
body = body,
|
||
|
headers = {
|
||
|
content_type = "application/json",
|
||
|
},
|
||
|
dry_run = true,
|
||
|
})
|
||
|
local joined_response = table.concat(res, " ")
|
||
|
local first_index = joined_response:find(body)
|
||
|
|
||
|
eq(nil, joined_response:find(body, first_index + 1))
|
||
|
end)
|
||
|
end)
|
||
|
describe("PUT", function() --------------------------------------------------
|
||
|
it("sends changes and get be back the new version.", function()
|
||
|
local cha = { title = "New Title" }
|
||
|
local res = curl.put("https://jsonplaceholder.typicode.com/posts/8", {
|
||
|
body = cha,
|
||
|
})
|
||
|
eq(cha.title, vim.fn.json_decode(res.body).title)
|
||
|
eq(200, res.status)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
describe("PATCH", function() ------------------------------------------------
|
||
|
it("sends changes and get be back the new version.", function()
|
||
|
local cha = { title = "New Title" }
|
||
|
local res = curl.patch("https://jsonplaceholder.typicode.com/posts/8", {
|
||
|
body = cha,
|
||
|
})
|
||
|
eq(cha.title, vim.fn.json_decode(res.body).title)
|
||
|
eq(200, res.status)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
describe("DELETE", function() ------------------------------------------------
|
||
|
it("sends delete request", function()
|
||
|
local res = curl.delete "https://jsonplaceholder.typicode.com/posts/8"
|
||
|
eq(200, res.status)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
describe("DEPUG", function() --------------------------------------------------
|
||
|
it("dry_run return the curl command to be ran.", function()
|
||
|
local res = curl.delete("https://jsonplaceholder.typicode.com/posts/8", { dry_run = true })
|
||
|
assert(type(res) == "table")
|
||
|
end)
|
||
|
end)
|
||
|
end)
|