cmd_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. //go:build !integration
  2. // +build !integration
  3. package main
  4. import (
  5. "context"
  6. "fmt"
  7. "io"
  8. "os"
  9. "os/exec"
  10. "strings"
  11. "testing"
  12. "github.com/Jguer/aur"
  13. "github.com/stretchr/testify/assert"
  14. "github.com/stretchr/testify/require"
  15. "github.com/Jguer/yay/v12/pkg/db/mock"
  16. mockaur "github.com/Jguer/yay/v12/pkg/dep/mock"
  17. "github.com/Jguer/yay/v12/pkg/query"
  18. "github.com/Jguer/yay/v12/pkg/settings"
  19. "github.com/Jguer/yay/v12/pkg/settings/exe"
  20. "github.com/Jguer/yay/v12/pkg/settings/parser"
  21. "github.com/Jguer/yay/v12/pkg/text"
  22. "github.com/Jguer/yay/v12/pkg/vcs"
  23. )
  24. func TestYogurtMenuAURDB(t *testing.T) {
  25. t.Skip("skip until Operation service is an interface")
  26. t.Parallel()
  27. makepkgBin := t.TempDir() + "/makepkg"
  28. pacmanBin := t.TempDir() + "/pacman"
  29. gitBin := t.TempDir() + "/git"
  30. f, err := os.OpenFile(makepkgBin, os.O_RDONLY|os.O_CREATE, 0o755)
  31. require.NoError(t, err)
  32. require.NoError(t, f.Close())
  33. f, err = os.OpenFile(pacmanBin, os.O_RDONLY|os.O_CREATE, 0o755)
  34. require.NoError(t, err)
  35. require.NoError(t, f.Close())
  36. f, err = os.OpenFile(gitBin, os.O_RDONLY|os.O_CREATE, 0o755)
  37. require.NoError(t, err)
  38. require.NoError(t, f.Close())
  39. captureOverride := func(cmd *exec.Cmd) (stdout string, stderr string, err error) {
  40. return "", "", nil
  41. }
  42. showOverride := func(cmd *exec.Cmd) error {
  43. return nil
  44. }
  45. mockRunner := &exe.MockRunner{CaptureFn: captureOverride, ShowFn: showOverride}
  46. cmdBuilder := &exe.CmdBuilder{
  47. MakepkgBin: makepkgBin,
  48. SudoBin: "su",
  49. PacmanBin: pacmanBin,
  50. PacmanConfigPath: "/etc/pacman.conf",
  51. GitBin: "git",
  52. Runner: mockRunner,
  53. SudoLoopEnabled: false,
  54. }
  55. cmdArgs := parser.MakeArguments()
  56. cmdArgs.AddArg("Y")
  57. cmdArgs.AddTarget("yay")
  58. db := &mock.DBExecutor{
  59. AlpmArchitecturesFn: func() ([]string, error) {
  60. return []string{"x86_64"}, nil
  61. },
  62. RefreshHandleFn: func() error {
  63. return nil
  64. },
  65. ReposFn: func() []string {
  66. return []string{"aur"}
  67. },
  68. SyncPackagesFn: func(s ...string) []mock.IPackage {
  69. return []mock.IPackage{
  70. &mock.Package{
  71. PName: "yay",
  72. PBase: "yay",
  73. PVersion: "10.0.0",
  74. PDB: mock.NewDB("aur"),
  75. },
  76. }
  77. },
  78. LocalPackageFn: func(s string) mock.IPackage {
  79. return nil
  80. },
  81. }
  82. aurCache := &mockaur.MockAUR{
  83. GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) {
  84. return []aur.Pkg{
  85. {
  86. Name: "yay",
  87. PackageBase: "yay",
  88. Version: "10.0.0",
  89. },
  90. }, nil
  91. },
  92. }
  93. logger := text.NewLogger(io.Discard, os.Stderr, strings.NewReader("1\n"), true, "test")
  94. cfg := &settings.Configuration{
  95. NewInstallEngine: true,
  96. RemoveMake: "no",
  97. Runtime: &settings.Runtime{
  98. Logger: logger,
  99. CmdBuilder: cmdBuilder,
  100. VCSStore: &vcs.Mock{},
  101. QueryBuilder: query.NewSourceQueryBuilder(aurCache, logger, "votes", parser.ModeAny, "name",
  102. true, false, true),
  103. AURCache: aurCache,
  104. },
  105. }
  106. err = handleCmd(context.Background(), cfg, cmdArgs, db)
  107. require.NoError(t, err)
  108. wantCapture := []string{}
  109. wantShow := []string{
  110. "pacman -S -y --config /etc/pacman.conf --",
  111. "pacman -S -y -u --config /etc/pacman.conf --",
  112. }
  113. require.Len(t, mockRunner.ShowCalls, len(wantShow))
  114. require.Len(t, mockRunner.CaptureCalls, len(wantCapture))
  115. for i, call := range mockRunner.ShowCalls {
  116. show := call.Args[0].(*exec.Cmd).String()
  117. show = strings.ReplaceAll(show, makepkgBin, "makepkg")
  118. show = strings.ReplaceAll(show, pacmanBin, "pacman")
  119. show = strings.ReplaceAll(show, gitBin, "pacman")
  120. // options are in a different order on different systems and on CI root user is used
  121. assert.Subset(t, strings.Split(show, " "), strings.Split(wantShow[i], " "), fmt.Sprintf("%d - %s", i, show))
  122. }
  123. }