aur_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package download
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. "net/http/httptest"
  7. "os"
  8. "path/filepath"
  9. "testing"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/Jguer/yay/v10/pkg/settings/exe"
  12. )
  13. func TestGetAURPkgbuild(t *testing.T) {
  14. t.Parallel()
  15. pkgBuildHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  16. w.WriteHeader(200)
  17. w.Write([]byte(gitExtrasPKGBUILD))
  18. })
  19. notFoundHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  20. w.WriteHeader(404)
  21. })
  22. type args struct {
  23. handler http.Handler
  24. pkgName string
  25. }
  26. tests := []struct {
  27. name string
  28. args args
  29. want string
  30. wantErr bool
  31. }{
  32. {
  33. name: "found package",
  34. args: args{
  35. handler: pkgBuildHandler,
  36. pkgName: "git-extras",
  37. },
  38. want: gitExtrasPKGBUILD,
  39. wantErr: false,
  40. },
  41. {
  42. name: "not found package",
  43. args: args{
  44. handler: notFoundHandler,
  45. pkgName: "git-extras",
  46. },
  47. want: "",
  48. wantErr: true,
  49. },
  50. }
  51. for _, tt := range tests {
  52. tt := tt
  53. t.Run(tt.name, func(t *testing.T) {
  54. t.Parallel()
  55. PKGBuild := httptest.NewServer(pkgBuildHandler)
  56. PKGBuild.Config.Handler = tt.args.handler
  57. got, err := AURPKGBUILD(PKGBuild.Client(), tt.args.pkgName, PKGBuild.URL)
  58. if tt.wantErr {
  59. assert.Error(t, err)
  60. } else {
  61. assert.NoError(t, err)
  62. }
  63. assert.Equal(t, tt.want, string(got))
  64. })
  65. }
  66. }
  67. // GIVEN no previous existing folder
  68. // WHEN AURPKGBUILDRepo is called
  69. // THEN a clone command should be formed
  70. func TestAURPKGBUILDRepo(t *testing.T) {
  71. t.Parallel()
  72. cmdRunner := &testRunner{}
  73. cmdBuilder := &testGitBuilder{
  74. index: 0,
  75. test: t,
  76. want: "/usr/local/bin/git --no-replace-objects -C /tmp/doesnt-exist clone --no-progress https://aur.archlinux.org/yay-bin.git yay-bin",
  77. parentBuilder: &exe.CmdBuilder{
  78. Runner: cmdRunner,
  79. GitBin: "/usr/local/bin/git",
  80. GitFlags: []string{"--no-replace-objects"},
  81. },
  82. }
  83. newCloned, err := AURPKGBUILDRepo(cmdBuilder, "https://aur.archlinux.org", "yay-bin", "/tmp/doesnt-exist", false)
  84. assert.NoError(t, err)
  85. assert.Equal(t, true, newCloned)
  86. }
  87. // GIVEN a previous existing folder with permissions
  88. // WHEN AURPKGBUILDRepo is called
  89. // THEN a pull command should be formed
  90. func TestAURPKGBUILDRepoExistsPerms(t *testing.T) {
  91. t.Parallel()
  92. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  93. defer os.RemoveAll(dir)
  94. os.MkdirAll(filepath.Join(dir, "yay-bin", ".git"), 0o777)
  95. cmdRunner := &testRunner{}
  96. cmdBuilder := &testGitBuilder{
  97. index: 0,
  98. test: t,
  99. want: fmt.Sprintf("/usr/local/bin/git --no-replace-objects -C %s/yay-bin pull --ff-only", dir),
  100. parentBuilder: &exe.CmdBuilder{
  101. Runner: cmdRunner,
  102. GitBin: "/usr/local/bin/git",
  103. GitFlags: []string{"--no-replace-objects"},
  104. },
  105. }
  106. cloned, err := AURPKGBUILDRepo(cmdBuilder, "https://aur.archlinux.org", "yay-bin", dir, false)
  107. assert.NoError(t, err)
  108. assert.Equal(t, false, cloned)
  109. }
  110. func TestAURPKGBUILDRepos(t *testing.T) {
  111. t.Parallel()
  112. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  113. defer os.RemoveAll(dir)
  114. os.MkdirAll(filepath.Join(dir, "yay-bin", ".git"), 0o777)
  115. targets := []string{"yay", "yay-bin", "yay-git"}
  116. cmdRunner := &testRunner{}
  117. cmdBuilder := &testGitBuilder{
  118. index: 0,
  119. test: t,
  120. want: "",
  121. parentBuilder: &exe.CmdBuilder{
  122. Runner: cmdRunner,
  123. GitBin: "/usr/local/bin/git",
  124. GitFlags: []string{},
  125. },
  126. }
  127. cloned, err := AURPKGBUILDRepos(cmdBuilder, targets, "https://aur.archlinux.org", dir, false)
  128. assert.NoError(t, err)
  129. assert.EqualValues(t, map[string]bool{"yay": true, "yay-bin": false, "yay-git": true}, cloned)
  130. }