aboutsummaryrefslogtreecommitdiffstats
path: root/tests/mason-core/fetch_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tests/mason-core/fetch_spec.lua')
-rw-r--r--tests/mason-core/fetch_spec.lua106
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)