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/runtime"
  19. "github.com/Jguer/yay/v12/pkg/settings"
  20. "github.com/Jguer/yay/v12/pkg/settings/exe"
  21. "github.com/Jguer/yay/v12/pkg/settings/parser"
  22. "github.com/Jguer/yay/v12/pkg/text"
  23. "github.com/Jguer/yay/v12/pkg/vcs"
  24. )
  25. func TestYogurtMenuAURDB(t *testing.T) {
  26. t.Skip("skip until Operation service is an interface")
  27. t.Parallel()
  28. makepkgBin := t.TempDir() + "/makepkg"
  29. pacmanBin := t.TempDir() + "/pacman"
  30. gitBin := t.TempDir() + "/git"
  31. f, err := os.OpenFile(makepkgBin, os.O_RDONLY|os.O_CREATE, 0o755)
  32. require.NoError(t, err)
  33. require.NoError(t, f.Close())
  34. f, err = os.OpenFile(pacmanBin, os.O_RDONLY|os.O_CREATE, 0o755)
  35. require.NoError(t, err)
  36. require.NoError(t, f.Close())
  37. f, err = os.OpenFile(gitBin, os.O_RDONLY|os.O_CREATE, 0o755)
  38. require.NoError(t, err)
  39. require.NoError(t, f.Close())
  40. captureOverride := func(cmd *exec.Cmd) (stdout string, stderr string, err error) {
  41. return "", "", nil
  42. }
  43. showOverride := func(cmd *exec.Cmd) error {
  44. return nil
  45. }
  46. mockRunner := &exe.MockRunner{CaptureFn: captureOverride, ShowFn: showOverride}
  47. cmdBuilder := &exe.CmdBuilder{
  48. MakepkgBin: makepkgBin,
  49. SudoBin: "su",
  50. PacmanBin: pacmanBin,
  51. PacmanConfigPath: "/etc/pacman.conf",
  52. GitBin: "git",
  53. Runner: mockRunner,
  54. SudoLoopEnabled: false,
  55. }
  56. cmdArgs := parser.MakeArguments()
  57. cmdArgs.AddArg("Y")
  58. cmdArgs.AddTarget("yay")
  59. db := &mock.DBExecutor{
  60. AlpmArchitecturesFn: func() ([]string, error) {
  61. return []string{"x86_64"}, nil
  62. },
  63. RefreshHandleFn: func() error {
  64. return nil
  65. },
  66. ReposFn: func() []string {
  67. return []string{"aur"}
  68. },
  69. SyncPackagesFn: func(s ...string) []mock.IPackage {
  70. return []mock.IPackage{
  71. &mock.Package{
  72. PName: "yay",
  73. PBase: "yay",
  74. PVersion: "10.0.0",
  75. PDB: mock.NewDB("aur"),
  76. },
  77. }
  78. },
  79. LocalPackageFn: func(s string) mock.IPackage {
  80. return nil
  81. },
  82. }
  83. aurCache := &mockaur.MockAUR{
  84. GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) {
  85. return []aur.Pkg{
  86. {
  87. Name: "yay",
  88. PackageBase: "yay",
  89. Version: "10.0.0",
  90. },
  91. }, nil
  92. },
  93. }
  94. logger := text.NewLogger(io.Discard, os.Stderr, strings.NewReader("1\n"), true, "test")
  95. run := &runtime.Runtime{
  96. Cfg: &settings.Configuration{
  97. RemoveMake: "no",
  98. },
  99. Logger: logger,
  100. CmdBuilder: cmdBuilder,
  101. VCSStore: &vcs.Mock{},
  102. QueryBuilder: query.NewSourceQueryBuilder(aurCache, logger, "votes", parser.ModeAny, "name",
  103. true, false, true),
  104. AURClient: aurCache,
  105. }
  106. err = handleCmd(context.Background(), run, 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. }