Files
yay/pkg/settings/lua/load_test.go
2026-06-04 09:47:16 +00:00

146 lines
4.2 KiB
Go

package lua
import (
"context"
"os"
"path/filepath"
"testing"
"github.com/Jguer/yay/v12/pkg/settings"
"github.com/Jguer/yay/v12/pkg/text"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLoadIntoRegistersBuiltins(t *testing.T) {
configHome := t.TempDir()
homeDir := t.TempDir()
t.Setenv("XDG_CONFIG_HOME", configHome)
t.Setenv("HOME", homeDir)
t.Setenv("YAY_LUA_EDITOR", "nvim")
configDir := filepath.Join(configHome, "yay")
require.NoError(t, os.MkdirAll(configDir, 0o755))
require.NoError(t, os.WriteFile(filepath.Join(configDir, "init.lua"), []byte(`
yay.api.info("lua init starting")
yay.api.warn("lua init warning")
yay.api.error("lua init error")
yay.opt.editor = yay.api.getenv("YAY_LUA_EDITOR")
yay.opt.build_dir = yay.api.expand("~/lua-build")
`), 0o644))
cfg := settings.DefaultConfig("v1.0.0")
logger := text.NewLogger(os.Stdout, os.Stderr, os.Stdin, false, "lua-test")
require.NoError(t, LoadInto(logger, cfg))
defer cfg.CloseLua()
assert.Equal(t, "nvim", cfg.Editor)
assert.Equal(t, filepath.Join(homeDir, "lua-build"), cfg.BuildDir)
assert.NotNil(t, cfg)
}
func TestLoadIntoExternalProvider(t *testing.T) {
configHome := t.TempDir()
homeDir := t.TempDir()
runLog := filepath.Join(t.TempDir(), "provider-run.log")
t.Setenv("XDG_CONFIG_HOME", configHome)
t.Setenv("HOME", homeDir)
t.Setenv("YAY_LUA_RUN_LOG", runLog)
configDir := filepath.Join(configHome, "yay")
require.NoError(t, os.MkdirAll(configDir, 0o755))
require.NoError(t, os.WriteFile(filepath.Join(configDir, "init.lua"), []byte(`
yay.provider.homebrew = {
list = function()
local stdout, stderr, code = yay.api.capture("sh", "-c", "printf '%s' '[{\"name\":\"wget\",\"installed_versions\":[\"1.0\"],\"current_version\":\"2.0\"}]'")
if code ~= 0 then
error(stderr)
end
local decoded = yay.api.json_decode(stdout)
local upgrades = {}
for _, item in ipairs(decoded) do
table.insert(upgrades, {
name = item.name,
repository = "homebrew",
local_version = item.installed_versions[1],
remote_version = item.current_version,
extra = "formula",
})
end
return upgrades
end,
upgrade = function(items)
local names = {}
for _, item in ipairs(items) do
table.insert(names, item.name)
end
local script = string.format("printf '%s' '%s' > \"%s\"", "%s", table.concat(names, ","), yay.api.expand("$YAY_LUA_RUN_LOG"))
local code = yay.api.run("sh", "-c", script)
if code ~= 0 then
error("provider execution failed")
end
end,
}
`), 0o644))
cfg := settings.DefaultConfig("v1.0.0")
logger := text.NewLogger(os.Stdout, os.Stderr, os.Stdin, false, "lua-test")
require.NoError(t, LoadInto(logger, cfg))
defer cfg.CloseLua()
upgrades, err := cfg.ExternalUpgrades(context.Background())
require.NoError(t, err)
assert.Equal(t, []settings.ExternalUpgrade{{
Name: "wget",
Repository: "homebrew",
LocalVersion: "1.0",
RemoteVersion: "2.0",
Extra: "formula",
}}, upgrades)
require.NoError(t, cfg.RunExternalUpgradeProvider(context.Background(), "homebrew", upgrades))
runOutput, err := os.ReadFile(runLog)
require.NoError(t, err)
assert.Equal(t, "wget", string(runOutput))
}
func TestLoadIntoPrefersWorkingDirectoryInitLua(t *testing.T) {
configHome := t.TempDir()
homeDir := t.TempDir()
cwd := t.TempDir()
t.Setenv("XDG_CONFIG_HOME", configHome)
t.Setenv("HOME", homeDir)
t.Setenv("YAY_LUA_EDITOR", "vim")
require.NoError(t, os.MkdirAll(filepath.Join(configHome, "yay"), 0o755))
require.NoError(t, os.WriteFile(filepath.Join(configHome, "yay", "init.lua"), []byte(`
yay.opt.editor = "config-dir"
`), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(cwd, "init.lua"), []byte(`
yay.opt.editor = yay.api.getenv("YAY_LUA_EDITOR")
`), 0o644))
oldWD, err := os.Getwd()
require.NoError(t, err)
require.NoError(t, os.Chdir(cwd))
t.Cleanup(func() {
require.NoError(t, os.Chdir(oldWD))
})
cfg := settings.DefaultConfig("v1.0.0")
logger := text.NewLogger(os.Stdout, os.Stderr, os.Stdin, false, "lua-test")
require.NoError(t, LoadInto(logger, cfg))
defer cfg.CloseLua()
assert.Equal(t, "vim", cfg.Editor)
}