summaryrefslogtreecommitdiff
path: root/tests/specs/plugins_load_spec.lua
blob: d32c521d94eeb99a77cd32e94727f29f876141f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
local a = require "plenary.async_lib.tests"

a.describe("plugin-loader", function()
  local plugins = require "lvim.plugins"
  local loader = require "lvim.plugin-loader"

  a.it("should be able to load default packages without errors", function()
    loader.load { plugins, lvim.plugins }

    -- TODO: maybe there's a way to avoid hard-coding the names of the modules?
    local startup_plugins = {
      "packer",
    }

    for _, plugin in ipairs(startup_plugins) do
      assert.truthy(package.loaded[plugin])
    end
  end)

  a.it("should be able to load lsp packages without errors", function()
    loader.load { plugins, lvim.plugins }

    require("lvim.lsp").setup()

    local lsp_packages = {
      "lspconfig",
      "nlspsettings",
      "null-ls",
    }

    for _, plugin in ipairs(lsp_packages) do
      assert.truthy(package.loaded[plugin])
    end
  end)
  a.it("should be able to rollback plugins without errors", function()
    local plugin = { name = "onedarker.nvim" }
    plugin.path = vim.tbl_filter(function(package)
      return package:match(plugin.name)
    end, vim.api.nvim_list_runtime_paths())[1]

    local get_current_sha = function(repo)
      local res = vim.fn.system(string.format("git -C %s log -1 --pretty=%%h", repo)):gsub("\n", "")
      return res
    end
    plugin.test_sha = "316b1c9"
    _G.locked_sha = get_current_sha(plugin.path)
    loader.load { plugins, lvim.plugins }

    os.execute(string.format("git -C %s fetch --deepen 999 --quiet", plugin.path))
    os.execute(string.format("git -C %s checkout %s --quiet", plugin.path, plugin.test_sha))
    assert.equal(plugin.test_sha, get_current_sha(plugin.path))
    _G.completed = false
    _G.verify_sha = function()
      if _G.locked_sha ~= get_current_sha(plugin.path) then
        error "unmached results!"
      else
        _G.completed = true
      end
    end
    vim.cmd [[autocmd User PackerComplete ++once lua _G.verify_sha()]]
    loader.load_snapshot()
    local ret = vim.wait(30 * 10 * 1000, function()
      return _G.completed == true
    end, 200)
    assert.True(ret)
  end)
end)