Files
yay/pkg/sync/workdir/aur_post_download_test.go
T
2026-06-18 19:58:23 +02:00

105 lines
2.9 KiB
Go

//go:build !integration
package workdir
import (
"os"
"path/filepath"
"testing"
mapset "github.com/deckarep/golang-set/v2"
"github.com/stretchr/testify/require"
glua "github.com/yuin/gopher-lua"
"github.com/Jguer/yay/v13/pkg/dep"
"github.com/Jguer/yay/v13/pkg/runtime"
settingslua "github.com/Jguer/yay/v13/pkg/settings/lua"
)
func TestAURPostDownloadEventsUseAURPreInstallPayload(t *testing.T) {
t.Parallel()
base := "demo-base"
dir := writeAURPostDownloadPackage(t, base)
events, err := aurPostDownloadEvents(map[string]string{base: dir},
mapset.NewThreadUnsafeSet[string](),
[]map[string]*dep.InstallInfo{
{
"demo": {Source: dep.AUR, AURBase: base, Version: "1.0-1"},
},
})
require.NoError(t, err)
require.Len(t, events, 1)
event := events[0]
require.Equal(t, base, event.Base)
require.Equal(t, dir, event.Dir)
require.Equal(t, filepath.Join(dir, "PKGBUILD"), event.PKGBUILDPath)
require.Equal(t, filepath.Join(dir, ".SRCINFO"), event.SRCINFOPath)
require.Contains(t, event.PKGBUILD, "pkgbase=demo-base")
require.Equal(t, "1.0-1", event.Version)
require.Equal(t, base, event.SRCINFO.Pkgbase)
require.Equal(t, "1.0", event.SRCINFO.Pkgver)
require.Equal(t, "1", event.SRCINFO.Pkgrel)
require.Equal(t, "1.0-1", event.SRCINFO.Version)
require.Equal(t, []string{"any"}, event.SRCINFO.Arch)
require.Equal(t, []settingslua.AURPreInstallPackage{{Name: "demo", Version: "1.0-1", Reason: "explicit"}}, event.Packages)
}
func TestRunAURPostDownloadLuaHooksRunsBasesInSortedOrder(t *testing.T) {
t.Parallel()
firstDir := writeAURPostDownloadPackage(t, "a-base")
secondDir := writeAURPostDownloadPackage(t, "z-base")
engine := settingslua.New()
t.Cleanup(engine.Close)
order := []string{}
engine.L.SetGlobal("record", engine.L.NewFunction(func(L *glua.LState) int {
order = append(order, L.CheckString(1))
return 0
}))
require.NoError(t, engine.L.DoString(`
yay.create_autocmd("AURPostDownload", {
callback = function(event)
record(event.match .. ":" .. event.data.pkgbuild_path)
end,
})
`))
err := runAURPostDownloadLuaHooks(&runtime.Runtime{Lua: engine},
map[string]string{"z-base": secondDir, "a-base": firstDir},
mapset.NewThreadUnsafeSet[string](),
[]map[string]*dep.InstallInfo{
{
"a": {Source: dep.AUR, AURBase: "a-base"},
"z": {Source: dep.AUR, AURBase: "z-base"},
},
})
require.NoError(t, err)
require.Equal(t, []string{
"a-base:" + filepath.Join(firstDir, "PKGBUILD"),
"z-base:" + filepath.Join(secondDir, "PKGBUILD"),
}, order)
}
func writeAURPostDownloadPackage(t *testing.T, base string) string {
t.Helper()
dir := t.TempDir()
require.NoError(t, os.WriteFile(filepath.Join(dir, "PKGBUILD"), []byte(`pkgbase=`+base+`
pkgname=(demo)
pkgver=1.0
pkgrel=1
`), 0o600))
require.NoError(t, os.WriteFile(filepath.Join(dir, ".SRCINFO"), []byte(`pkgbase = `+base+`
pkgver = 1.0
pkgrel = 1
arch = any
pkgname = demo
`), 0o600))
return dir
}