Skip to content

Commit 0d0cc63

Browse files
test: ensure notify when request failed
1 parent e7eeb25 commit 0d0cc63

File tree

5 files changed

+45
-24
lines changed

5 files changed

+45
-24
lines changed

lua/rest-nvim/client/curl/cli.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ function curl.cli(args, on_exit, opts)
3232
curl_cmd = vim.list_extend(curl_cmd, args)
3333
log.info(curl_cmd)
3434
opts.detach = false
35+
on_exit = vim.schedule_wrap(on_exit)
3536
local ok, e = pcall(vim.system, curl_cmd, opts, on_exit)
3637
if not ok then
3738
---@type vim.SystemCompleted

lua/rest-nvim/request.lua

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -60,41 +60,39 @@ local function run_request(req)
6060

6161
ui.update({ request = req })
6262

63+
-- NOTE: wrap with schedule to do vim stuffs outside of lua callback loop (`on_exit`
64+
-- callback from `vim.system()` call)
6365
nio.run(function()
6466
local ok, res = pcall(client.request(req).wait)
6567
if not ok then
6668
logger.error("request failed")
67-
vim.notify("request failed", vim.log.levels.ERROR, { title = "rest.nvim" })
69+
vim.notify("request failed. See `:Rest logs` for more info", vim.log.levels.ERROR, { title = "rest.nvim" })
6870
return
6971
end
7072
---@cast res rest.Response
7173
logger.info("request success")
7274

73-
-- NOTE: wrap with schedule to do vim stuffs outside of lua callback loop (`on_exit`
74-
-- callback from `vim.system()` call)
75-
vim.schedule(function()
76-
-- run request handler scripts
77-
vim.iter(req.handlers):each(function(f)
78-
f(res)
79-
end)
80-
logger.info("handler done")
81-
82-
_G.rest_request = req
83-
_G.rest_response = res
84-
vim.api.nvim_exec_autocmds("User", {
85-
pattern = { "RestResponse", "RestResponsePre" },
86-
})
87-
_G.rest_request = nil
88-
_G.rest_response = nil
89-
90-
-- update cookie jar
91-
jar.update_jar(req.url, res)
92-
93-
-- update result UI
94-
ui.update({ response = res })
75+
-- run request handler scripts
76+
vim.iter(req.handlers):each(function(f)
77+
f(res)
9578
end)
79+
logger.info("handler done")
80+
81+
_G.rest_request = req
82+
_G.rest_response = res
83+
vim.api.nvim_exec_autocmds("User", {
84+
pattern = { "RestResponse", "RestResponsePre" },
85+
})
86+
_G.rest_request = nil
87+
_G.rest_response = nil
88+
89+
-- update cookie jar
90+
jar.update_jar(req.url, res)
91+
92+
-- update result UI
93+
ui.update({ response = res })
9694
end)
97-
-- FIXME: return future to pass the command state
95+
-- FIXME(boltless): return future to pass the command state
9896
end
9997

10098
---Run request in current file.

spec/client/curl/command_spec.lua

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
require("spec.minimal_init")
44

5+
local nio = require("nio")
6+
local spy = require("luassert.spy")
7+
58
local function open(path)
69
vim.cmd.edit(path)
710
return 0
@@ -21,3 +24,17 @@ describe(":Rest curl", function()
2124
)
2225
end)
2326
end)
27+
28+
describe(":Rest run", function ()
29+
nio.tests.it("notify on request failed", function ()
30+
open("spec/examples/basic_get.http")
31+
-- go to line number 6
32+
vim.cmd("6")
33+
local spy_notify = spy.on(vim, "notify")
34+
-- run request
35+
vim.cmd(":Rest run")
36+
nio.sleep(100)
37+
---@diagnostic disable-next-line: undefined-field
38+
assert.spy(spy_notify).called_with("request failed. See `:Rest logs` for more info", vim.log.levels.ERROR, { title = "rest.nvim" })
39+
end)
40+
end)

spec/examples/basic_get.http

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
### basic get statement
22
GET https://api.github.com/users/boltlessengineer
33
user-agent: neovim
4+
5+
### get statement for localhost
6+
GET localhost:9999

spec/ui/panes_spec.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ describe("ui.panes", function()
5757
assert.not_same("this-is-a-winbar", vim.api.nvim_get_option_value("winbar", { scope = "local" }))
5858
end)
5959
it("initialize the buffer back after unloaded", function()
60+
-- ensure there is only one window
61+
vim.cmd("wincmd o")
6062
assert.same(1, vim.api.nvim_get_current_buf())
6163
group:enter(0)
6264
local pane_buf = vim.api.nvim_get_current_buf()

0 commit comments

Comments
 (0)