abs_test.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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. const gitExtrasPKGBUILD = `pkgname=git-extras
  14. pkgver=6.1.0
  15. pkgrel=1
  16. pkgdesc="GIT utilities -- repo summary, commit counting, repl, changelog population and more"
  17. arch=('any')
  18. url="https://github.com/tj/${pkgname}"
  19. license=('MIT')
  20. depends=('git')
  21. source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/${pkgver}.tar.gz")
  22. sha256sums=('7be0b15ee803d76d2c2e8036f5d9db6677f2232bb8d2c4976691ff7ae026a22f')
  23. b2sums=('3450edecb3116e19ffcf918b118aee04f025c06d812e29e8701f35a3c466b13d2578d41c8e1ee93327743d0019bf98bb3f397189e19435f89e3a259ff1b82747')
  24. package() {
  25. cd "${srcdir}/${pkgname}-${pkgver}"
  26. # avoid annoying interactive prompts if an alias is in your gitconfig
  27. export GIT_CONFIG=/dev/null
  28. make DESTDIR="${pkgdir}" PREFIX=/usr SYSCONFDIR=/etc install
  29. install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
  30. }`
  31. func Test_getPackageURL(t *testing.T) {
  32. t.Parallel()
  33. type args struct {
  34. db string
  35. pkgName string
  36. }
  37. tests := []struct {
  38. name string
  39. args args
  40. want string
  41. wantErr bool
  42. }{
  43. {
  44. name: "community package",
  45. args: args{
  46. db: "community",
  47. pkgName: "kitty",
  48. },
  49. want: "https://github.com/archlinux/svntogit-community/raw/packages/kitty/trunk/PKGBUILD",
  50. wantErr: false,
  51. },
  52. {
  53. name: "core package",
  54. args: args{
  55. db: "core",
  56. pkgName: "linux",
  57. },
  58. want: "https://github.com/archlinux/svntogit-packages/raw/packages/linux/trunk/PKGBUILD",
  59. wantErr: false,
  60. },
  61. {
  62. name: "personal repo package",
  63. args: args{
  64. db: "sweswe",
  65. pkgName: "linux",
  66. },
  67. want: "",
  68. wantErr: true,
  69. },
  70. }
  71. for _, tt := range tests {
  72. tt := tt
  73. t.Run(tt.name, func(t *testing.T) {
  74. t.Parallel()
  75. got, err := getPackageURL(tt.args.db, tt.args.pkgName)
  76. if tt.wantErr {
  77. assert.ErrorIs(t, err, ErrInvalidRepository)
  78. }
  79. assert.Equal(t, tt.want, got)
  80. })
  81. }
  82. }
  83. func TestGetABSPkgbuild(t *testing.T) {
  84. t.Parallel()
  85. pkgBuildHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  86. w.WriteHeader(200)
  87. w.Write([]byte(gitExtrasPKGBUILD))
  88. })
  89. notFoundHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  90. w.WriteHeader(404)
  91. })
  92. type args struct {
  93. handler http.Handler
  94. dbName string
  95. pkgName string
  96. }
  97. tests := []struct {
  98. name string
  99. args args
  100. want string
  101. wantErr bool
  102. }{
  103. {
  104. name: "found package",
  105. args: args{
  106. handler: pkgBuildHandler,
  107. dbName: "core",
  108. pkgName: "git-extras",
  109. },
  110. want: gitExtrasPKGBUILD,
  111. wantErr: false,
  112. },
  113. {
  114. name: "not found package",
  115. args: args{
  116. handler: notFoundHandler,
  117. dbName: "core",
  118. pkgName: "git-extras",
  119. },
  120. want: "",
  121. wantErr: true,
  122. },
  123. }
  124. for _, tt := range tests {
  125. tt := tt
  126. t.Run(tt.name, func(t *testing.T) {
  127. t.Parallel()
  128. PKGBuild := httptest.NewServer(pkgBuildHandler)
  129. ABSPackageURL = PKGBuild.URL
  130. PKGBuild.Config.Handler = tt.args.handler
  131. got, err := ABSPKGBUILD(PKGBuild.Client(), tt.args.dbName, tt.args.pkgName)
  132. if tt.wantErr {
  133. assert.Error(t, err)
  134. } else {
  135. assert.NoError(t, err)
  136. }
  137. assert.Equal(t, tt.want, string(got))
  138. })
  139. }
  140. }
  141. func Test_getPackageRepoURL(t *testing.T) {
  142. t.Parallel()
  143. type args struct {
  144. db string
  145. }
  146. tests := []struct {
  147. name string
  148. args args
  149. want string
  150. wantErr bool
  151. }{
  152. {
  153. name: "community package",
  154. args: args{db: "community"},
  155. want: "https://github.com/archlinux/svntogit-community.git",
  156. wantErr: false,
  157. },
  158. {
  159. name: "core package",
  160. args: args{db: "core"},
  161. want: "https://github.com/archlinux/svntogit-packages.git",
  162. wantErr: false,
  163. },
  164. {
  165. name: "personal repo package",
  166. args: args{db: "sweswe"},
  167. want: "",
  168. wantErr: true,
  169. },
  170. }
  171. for _, tt := range tests {
  172. tt := tt
  173. t.Run(tt.name, func(t *testing.T) {
  174. t.Parallel()
  175. got, err := getPackageRepoURL(tt.args.db)
  176. if tt.wantErr {
  177. assert.ErrorIs(t, err, ErrInvalidRepository)
  178. }
  179. assert.Equal(t, tt.want, got)
  180. })
  181. }
  182. }
  183. // GIVEN no previous existing folder
  184. // WHEN ABSPKGBUILDRepo is called
  185. // THEN a clone command should be formed
  186. func TestABSPKGBUILDRepo(t *testing.T) {
  187. t.Parallel()
  188. cmdRunner := &testRunner{}
  189. cmdBuilder := &testGitBuilder{
  190. index: 0,
  191. test: t,
  192. want: "/usr/local/bin/git --no-replace-objects -C /tmp/doesnt-exist clone --no-progress --single-branch -b packages/linux https://github.com/archlinux/svntogit-packages.git linux",
  193. parentBuilder: &exe.CmdBuilder{
  194. Runner: cmdRunner,
  195. GitBin: "/usr/local/bin/git",
  196. GitFlags: []string{"--no-replace-objects"},
  197. },
  198. }
  199. newClone, err := ABSPKGBUILDRepo(cmdBuilder, "core", "linux", "/tmp/doesnt-exist", false)
  200. assert.NoError(t, err)
  201. assert.Equal(t, true, newClone)
  202. }
  203. // GIVEN a previous existing folder with permissions
  204. // WHEN ABSPKGBUILDRepo is called
  205. // THEN a pull command should be formed
  206. func TestABSPKGBUILDRepoExistsPerms(t *testing.T) {
  207. t.Parallel()
  208. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  209. defer os.RemoveAll(dir)
  210. os.MkdirAll(filepath.Join(dir, "linux", ".git"), 0o777)
  211. cmdRunner := &testRunner{}
  212. cmdBuilder := &testGitBuilder{
  213. index: 0,
  214. test: t,
  215. want: fmt.Sprintf("/usr/local/bin/git --no-replace-objects -C %s/linux pull --ff-only", dir),
  216. parentBuilder: &exe.CmdBuilder{
  217. Runner: cmdRunner,
  218. GitBin: "/usr/local/bin/git",
  219. GitFlags: []string{"--no-replace-objects"},
  220. },
  221. }
  222. newClone, err := ABSPKGBUILDRepo(cmdBuilder, "core", "linux", dir, false)
  223. assert.NoError(t, err)
  224. assert.Equal(t, false, newClone)
  225. }