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

107 lines
2.6 KiB
Go

package lua
import (
"testing"
"github.com/Jguer/yay/v12/pkg/settings"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// minimal struct mirroring the relevant Configuration fields/tags, kept local
// to avoid an import cycle with pkg/settings.
type fakeCfg struct {
Editor string `ini:"Editor"`
BottomUp bool `ini:"BottomUp"`
SplitN int `ini:"RequestSplitN"`
Skipped string `ini:"-"`
Untagged string
}
func TestEngine_ApplyAndOnPrompt(t *testing.T) {
t.Parallel()
e := New()
defer e.Close()
src := `
yay.opt.editor = "nvim"
yay.opt.bottom_up = true
yay.opt.RequestSplitN = 42
yay.opt.does_not_exist = "ignored"
yay.hook.on_prompt = function(name, default)
if name == "clean" then return "1 2 3" end
return default
end
yay.hook.should_include_aur_update = function(pkg)
return pkg.remote_last_modified > pkg.local_build_date
end
`
require.NoError(t, e.RunString(src))
var cfg fakeCfg
unknown, errs := e.Apply(&cfg)
require.Empty(t, errs, "unexpected apply errors: %v", errs)
assert.ElementsMatch(t, []string{"does_not_exist"}, unknown)
assert.Equal(t, "nvim", cfg.Editor)
assert.True(t, cfg.BottomUp)
assert.Equal(t, 42, cfg.SplitN)
got, ok, err := e.CallOnPrompt("clean", "")
require.NoError(t, err)
assert.True(t, ok)
assert.Equal(t, "1 2 3", got)
got, ok, err = e.CallOnPrompt("diff", "default-ans")
require.NoError(t, err)
assert.True(t, ok)
assert.Equal(t, "default-ans", got)
include, ok, err := e.CallShouldIncludeAURUpdate(settings.AURUpdateContext{
Name: "hello",
Repository: "aur",
LocalVersion: "2.0.0",
RemoteVersion: "2.0.0",
LocalBuildDate: 100,
RemoteLastModified: 200,
DefaultInclude: false,
})
require.NoError(t, err)
assert.True(t, ok)
assert.True(t, include)
}
func TestEngine_OnPromptUnsetReturnsFalse(t *testing.T) {
t.Parallel()
e := New()
defer e.Close()
got, ok, err := e.CallOnPrompt("clean", "x")
require.NoError(t, err)
assert.False(t, ok)
assert.Equal(t, "", got)
}
func TestEngine_ShouldIncludeAURUpdateUnsetReturnsFalse(t *testing.T) {
t.Parallel()
e := New()
defer e.Close()
include, ok, err := e.CallShouldIncludeAURUpdate(settings.AURUpdateContext{})
require.NoError(t, err)
assert.False(t, ok)
assert.False(t, include)
}
func TestEngine_ApplyTypeMismatchReportsError(t *testing.T) {
t.Parallel()
e := New()
defer e.Close()
require.NoError(t, e.RunString(`yay.opt.editor = 123`))
var cfg fakeCfg
_, errs := e.Apply(&cfg)
require.Len(t, errs, 1)
assert.Contains(t, errs[0].Error(), "yay.opt.editor")
}