aboutsummaryrefslogtreecommitdiffstats
path: root/tests/mason-core/managers/git_spec.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-08 18:34:38 +0200
committerGitHub <noreply@github.com>2022-07-08 18:34:38 +0200
commit976aa4fbee8a070f362cab6f6ec84e9251a90cf9 (patch)
tree5e8d9c9c59444a25c7801b8f39763c4ba6e1f76d /tests/mason-core/managers/git_spec.lua
parentfeat: add gotests, gomodifytags, impl (#28) (diff)
downloadmason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.gz
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.bz2
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.lz
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.xz
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.tar.zst
mason-976aa4fbee8a070f362cab6f6ec84e9251a90cf9.zip
refactor: add mason-schemas and mason-core modules (#29)
* refactor: add mason-schemas and move generated filetype map to mason-lspconfig * refactor: add mason-core module
Diffstat (limited to 'tests/mason-core/managers/git_spec.lua')
-rw-r--r--tests/mason-core/managers/git_spec.lua181
1 files changed, 181 insertions, 0 deletions
diff --git a/tests/mason-core/managers/git_spec.lua b/tests/mason-core/managers/git_spec.lua
new file mode 100644
index 00000000..b7da068e
--- /dev/null
+++ b/tests/mason-core/managers/git_spec.lua
@@ -0,0 +1,181 @@
+local spy = require "luassert.spy"
+local mock = require "luassert.mock"
+local spawn = require "mason-core.spawn"
+local Result = require "mason-core.result"
+local installer = require "mason-core.installer"
+
+local git = require "mason-core.managers.git"
+local Optional = require "mason-core.optional"
+
+describe("git manager", function()
+ it(
+ "should fail if no git repo provided",
+ async_test(function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ local err = assert.has_errors(function()
+ installer.run_installer(ctx, function()
+ git.clone {}
+ end)
+ end)
+ assert.equals("No git URL provided.", err)
+ assert.spy(ctx.spawn.git).was_not_called()
+ end)
+ )
+
+ it(
+ "should clone provided repo",
+ async_test(function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ installer.run_installer(ctx, function()
+ git.clone { "https://github.com/williamboman/mason.nvim.git" }
+ end)
+ assert.spy(ctx.spawn.git).was_called(1)
+ assert.spy(ctx.spawn.git).was_called_with {
+ "clone",
+ "--depth",
+ "1",
+ vim.NIL,
+ "https://github.com/williamboman/mason.nvim.git",
+ ".",
+ }
+ end)
+ )
+
+ it(
+ "should fetch and checkout revision if requested",
+ async_test(function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle, { requested_version = "1337" })
+ installer.run_installer(ctx, function()
+ git.clone { "https://github.com/williamboman/mason.nvim.git" }
+ end)
+ assert.spy(ctx.spawn.git).was_called(3)
+ assert.spy(ctx.spawn.git).was_called_with {
+ "clone",
+ "--depth",
+ "1",
+ vim.NIL,
+ "https://github.com/williamboman/mason.nvim.git",
+ ".",
+ }
+ assert.spy(ctx.spawn.git).was_called_with {
+ "fetch",
+ "--depth",
+ "1",
+ "origin",
+ "1337",
+ }
+ assert.spy(ctx.spawn.git).was_called_with { "checkout", "FETCH_HEAD" }
+ end)
+ )
+
+ it(
+ "should provide receipt information",
+ async_test(function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ installer.run_installer(ctx, function()
+ git.clone({ "https://github.com/williamboman/mason.nvim.git" }).with_receipt()
+ end)
+ assert.same({
+ type = "git",
+ remote = "https://github.com/williamboman/mason.nvim.git",
+ }, ctx.receipt.primary_source)
+ assert.is_true(#ctx.receipt.secondary_sources == 0)
+ end)
+ )
+end)
+
+describe("git version check", function()
+ it(
+ "should return current version",
+ async_test(function()
+ spawn.git = spy.new(function()
+ return Result.success {
+ stdout = [[19c668c]],
+ }
+ end)
+
+ local result = git.get_installed_revision({ type = "git" }, "/tmp/install/dir")
+
+ assert.spy(spawn.git).was_called(1)
+ assert.spy(spawn.git).was_called_with { "rev-parse", "--short", "HEAD", cwd = "/tmp/install/dir" }
+ assert.is_true(result:is_success())
+ assert.equals("19c668c", result:get_or_nil())
+
+ spawn.git = nil
+ end)
+ )
+
+ it(
+ "should check for outdated git clone",
+ async_test(function()
+ spawn.git = spy.new(function()
+ return Result.success {
+ stdout = [[728307a74cd5f2dec7ca2ca164785c25673d6328
+19c668cd10695b243b09452f0dfd53570c1a2e7d]],
+ }
+ end)
+
+ local result = git.check_outdated_git_clone(
+ mock.new {
+ primary_source = mock.new {
+ type = "git",
+ remote = "https://github.com/williamboman/mason.nvim.git",
+ },
+ },
+ "/tmp/install/dir"
+ )
+
+ assert.spy(spawn.git).was_called(2)
+ assert.spy(spawn.git).was_called_with {
+ "fetch",
+ "origin",
+ "HEAD",
+ cwd = "/tmp/install/dir",
+ }
+ assert.spy(spawn.git).was_called_with {
+ "rev-parse",
+ "FETCH_HEAD",
+ "HEAD",
+ cwd = "/tmp/install/dir",
+ }
+ assert.is_true(result:is_success())
+ assert.same({
+ name = "https://github.com/williamboman/mason.nvim.git",
+ current_version = "19c668cd10695b243b09452f0dfd53570c1a2e7d",
+ latest_version = "728307a74cd5f2dec7ca2ca164785c25673d6328",
+ }, result:get_or_nil())
+
+ spawn.git = nil
+ end)
+ )
+
+ it(
+ "should return failure if clone is not outdated",
+ async_test(function()
+ spawn.git = spy.new(function()
+ return Result.success {
+ stdout = [[19c668cd10695b243b09452f0dfd53570c1a2e7d
+19c668cd10695b243b09452f0dfd53570c1a2e7d]],
+ }
+ end)
+
+ local result = git.check_outdated_git_clone(
+ mock.new {
+ primary_source = mock.new {
+ type = "git",
+ remote = "https://github.com/williamboman/mason.nvim.git",
+ },
+ },
+ "/tmp/install/dir"
+ )
+
+ assert.is_true(result:is_failure())
+ assert.equals("Git clone is up to date.", result:err_or_nil())
+ spawn.git = nil
+ end)
+ )
+end)