cmd_test.go 3.6 KB

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