Files
yay/pkg/sync/workdir/workdir_ops_test.go
Jo 15057c8dab misc(ci): add modernize linter and update versioning (#2870)
* add modernize linter

* lint unused

* update imports

* ignore agent info
2026-06-17 21:09:53 +02:00

114 lines
3.4 KiB
Go

//go:build !integration
package workdir
import (
"context"
"os/exec"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/Jguer/yay/v13/pkg/runtime"
"github.com/Jguer/yay/v13/pkg/settings"
"github.com/Jguer/yay/v13/pkg/settings/parser"
"github.com/Jguer/yay/v13/pkg/text"
)
func TestMergePkgbuilds(t *testing.T) {
t.Parallel()
builder := &fakeWorkdirCmdBuilder{}
dirs := map[string]string{
"one": "/tmp/pkg-one",
"two": "/tmp/pkg-two",
}
err := mergePkgbuilds(context.Background(), builder, dirs)
require.NoError(t, err)
require.Len(t, builder.captureCalls, 4)
require.True(t, strings.Contains(builder.captureCalls[0], "reset"))
require.True(t, strings.Contains(builder.captureCalls[1], "merge"))
}
func TestCleanAfter(t *testing.T) {
t.Parallel()
builder := &fakeWorkdirCmdBuilder{}
run := &runtime.Runtime{
Logger: text.NewLogger(&strings.Builder{}, &strings.Builder{}, strings.NewReader(""), false, "test"),
CmdBuilder: builder,
}
dirs := map[string]string{
"one": "/tmp/pkg-one",
"two": "/tmp/pkg-two",
}
cleanAfter(context.Background(), run, builder, dirs)
require.Len(t, builder.captureCalls, 2)
require.Len(t, builder.showCalls, 2)
require.True(t, strings.Contains(builder.captureCalls[0], "reset"))
require.True(t, strings.Contains(builder.showCalls[0], "clean"))
}
func TestRemoveMake(t *testing.T) {
var old bool
old, settings.NoConfirm = settings.NoConfirm, false
defer func() { settings.NoConfirm = old }()
builder := &fakeWorkdirCmdBuilder{}
args := parser.MakeArguments()
args.AddArg("Q")
_ = removeMake(context.Background(), &settings.Configuration{}, builder, []string{"foo", "bar"}, args)
require.Len(t, builder.showCalls, 1)
require.Contains(t, builder.showCalls[0], "pacman")
require.Contains(t, builder.showCalls[0], "-R")
require.Contains(t, builder.showCalls[0], "foo")
require.Contains(t, builder.showCalls[0], "bar")
require.True(t, strings.Contains(builder.showCalls[0], "--noconfirm"))
}
type fakeWorkdirCmdBuilder struct {
captureCalls []string
showCalls []string
}
func (f *fakeWorkdirCmdBuilder) BuildGitCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
return exec.CommandContext(ctx, "git", extraArgs...)
}
func (f *fakeWorkdirCmdBuilder) BuildPacmanCmd(ctx context.Context, args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd {
cmdArgs := append([]string{"pacman"}, args.FormatGlobals()...)
cmdArgs = append(cmdArgs, args.FormatArgs()...)
cmdArgs = append(cmdArgs, args.Targets...)
if noConfirm {
cmdArgs = append(cmdArgs, "--noconfirm")
}
return exec.CommandContext(ctx, cmdArgs[0], cmdArgs[1:]...)
}
func (f *fakeWorkdirCmdBuilder) BuildMakepkgCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
return exec.CommandContext(ctx, "makepkg", extraArgs...)
}
func (f *fakeWorkdirCmdBuilder) BuildGPGCmd(ctx context.Context, extraArgs ...string) *exec.Cmd {
return exec.CommandContext(ctx, "gpg", extraArgs...)
}
func (f *fakeWorkdirCmdBuilder) AddMakepkgFlag(string) {}
func (f *fakeWorkdirCmdBuilder) GetKeepSrc() bool { return false }
func (f *fakeWorkdirCmdBuilder) SudoLoop() {}
func (f *fakeWorkdirCmdBuilder) Capture(cmd *exec.Cmd) (string, string, error) {
f.captureCalls = append(f.captureCalls, cmd.String())
return "", "", nil
}
func (f *fakeWorkdirCmdBuilder) Show(cmd *exec.Cmd) error {
f.showCalls = append(f.showCalls, cmd.String())
return nil
}