diff options
Diffstat (limited to 'tests/mason-core/fetch_spec.lua')
| -rw-r--r-- | tests/mason-core/fetch_spec.lua | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/mason-core/fetch_spec.lua b/tests/mason-core/fetch_spec.lua new file mode 100644 index 00000000..5385f546 --- /dev/null +++ b/tests/mason-core/fetch_spec.lua @@ -0,0 +1,106 @@ +local stub = require "luassert.stub" +local match = require "luassert.match" +local fetch = require "mason-core.fetch" +local spawn = require "mason-core.spawn" +local Result = require "mason-core.result" + +describe("fetch", function() + it( + "should exhaust all candidates", + async_test(function() + stub(spawn, "wget") + stub(spawn, "curl") + spawn.wget.returns(Result.failure "wget failure") + spawn.curl.returns(Result.failure "curl failure") + + local result = fetch("https://api.github.com", { + headers = { ["X-Custom-Header"] = "here" }, + }) + assert.is_true(result:is_failure()) + assert.spy(spawn.wget).was_called(1) + assert.spy(spawn.curl).was_called(1) + assert.spy(spawn.wget).was_called_with { + { + "--header='User-Agent: mason.nvim (+https://github.com/williamboman/mason.nvim)'", + "--header='X-Custom-Header: here'", + }, + "-nv", + "-O", + "-", + "--method=GET", + vim.NIL, -- body-data + "https://api.github.com", + } + + assert.spy(spawn.curl).was_called_with(match.tbl_containing { + match.same { + { + "-H", + "User-Agent: mason.nvim (+https://github.com/williamboman/mason.nvim)", + }, + { + "-H", + "X-Custom-Header: here", + }, + }, + "-fsSL", + match.same { "-X", "GET" }, + vim.NIL, -- data + vim.NIL, -- out file + "https://api.github.com", + on_spawn = match.is_function(), + }) + end) + ) + + it( + "should return stdout", + async_test(function() + stub(spawn, "wget") + spawn.wget.returns(Result.success { + stdout = [[{"data": "here"}]], + }) + local result = fetch "https://api.github.com/data" + assert.is_true(result:is_success()) + assert.equals([[{"data": "here"}]], result:get_or_throw()) + end) + ) + + it( + "should respect out_file opt", + async_test(function() + stub(spawn, "wget") + stub(spawn, "curl") + spawn.wget.returns(Result.failure "wget failure") + spawn.curl.returns(Result.failure "curl failure") + fetch("https://api.github.com/data", { out_file = "/test.json" }) + + assert.spy(spawn.wget).was_called_with { + { + "--header='User-Agent: mason.nvim (+https://github.com/williamboman/mason.nvim)'", + }, + "-nv", + "-O", + "/test.json", + "--method=GET", + vim.NIL, -- body-data + "https://api.github.com/data", + } + + assert.spy(spawn.curl).was_called_with(match.tbl_containing { + match.same { + { + "-H", + "User-Agent: mason.nvim (+https://github.com/williamboman/mason.nvim)", + }, + }, + "-fsSL", + match.same { "-X", "GET" }, + vim.NIL, -- data + match.same { "-o", "/test.json" }, + "https://api.github.com/data", + on_spawn = match.is_function(), + }) + end) + ) +end) |
