unified_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package download
  2. import (
  3. "io/ioutil"
  4. "net/http"
  5. "os"
  6. "path/filepath"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. "gopkg.in/h2non/gock.v1"
  10. "github.com/Jguer/yay/v10/pkg/settings/exe"
  11. "github.com/Jguer/yay/v10/pkg/settings/parser"
  12. )
  13. // GIVEN 2 aur packages and 1 in repo
  14. // GIVEN package in repo is already present
  15. // WHEN defining package db as a target
  16. // THEN all should be found and cloned, except the repo one
  17. func TestPKGBUILDReposDefinedDBPull(t *testing.T) {
  18. t.Parallel()
  19. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  20. defer os.RemoveAll(dir)
  21. os.MkdirAll(filepath.Join(dir, "yay", ".git"), 0o777)
  22. targets := []string{"core/yay", "yay-bin", "yay-git"}
  23. cmdRunner := &testRunner{}
  24. cmdBuilder := &testGitBuilder{
  25. index: 0,
  26. test: t,
  27. parentBuilder: &exe.CmdBuilder{
  28. Runner: cmdRunner,
  29. GitBin: "/usr/local/bin/git",
  30. GitFlags: []string{},
  31. },
  32. }
  33. searcher := &testDBSearcher{
  34. absPackagesDB: map[string]string{"yay": "core"},
  35. }
  36. cloned, err := PKGBUILDRepos(searcher,
  37. cmdBuilder,
  38. targets, parser.ModeAny, "https://aur.archlinux.org", dir, false)
  39. assert.NoError(t, err)
  40. assert.EqualValues(t, map[string]bool{"core/yay": false, "yay-bin": true, "yay-git": true}, cloned)
  41. }
  42. // GIVEN 2 aur packages and 1 in repo
  43. // WHEN defining package db as a target
  44. // THEN all should be found and cloned
  45. func TestPKGBUILDReposDefinedDBClone(t *testing.T) {
  46. t.Parallel()
  47. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  48. defer os.RemoveAll(dir)
  49. targets := []string{"core/yay", "yay-bin", "yay-git"}
  50. cmdRunner := &testRunner{}
  51. cmdBuilder := &testGitBuilder{
  52. index: 0,
  53. test: t,
  54. parentBuilder: &exe.CmdBuilder{
  55. Runner: cmdRunner,
  56. GitBin: "/usr/local/bin/git",
  57. GitFlags: []string{},
  58. },
  59. }
  60. searcher := &testDBSearcher{
  61. absPackagesDB: map[string]string{"yay": "core"},
  62. }
  63. cloned, err := PKGBUILDRepos(searcher,
  64. cmdBuilder,
  65. targets, parser.ModeAny, "https://aur.archlinux.org", dir, false)
  66. assert.NoError(t, err)
  67. assert.EqualValues(t, map[string]bool{"core/yay": true, "yay-bin": true, "yay-git": true}, cloned)
  68. }
  69. // GIVEN 2 aur packages and 1 in repo
  70. // WHEN defining as non specified targets
  71. // THEN all should be found and cloned
  72. func TestPKGBUILDReposClone(t *testing.T) {
  73. t.Parallel()
  74. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  75. defer os.RemoveAll(dir)
  76. targets := []string{"yay", "yay-bin", "yay-git"}
  77. cmdRunner := &testRunner{}
  78. cmdBuilder := &testGitBuilder{
  79. index: 0,
  80. test: t,
  81. parentBuilder: &exe.CmdBuilder{
  82. Runner: cmdRunner,
  83. GitBin: "/usr/local/bin/git",
  84. GitFlags: []string{},
  85. },
  86. }
  87. searcher := &testDBSearcher{
  88. absPackagesDB: map[string]string{"yay": "core"},
  89. }
  90. cloned, err := PKGBUILDRepos(searcher,
  91. cmdBuilder,
  92. targets, parser.ModeAny, "https://aur.archlinux.org", dir, false)
  93. assert.NoError(t, err)
  94. assert.EqualValues(t, map[string]bool{"yay": true, "yay-bin": true, "yay-git": true}, cloned)
  95. }
  96. // GIVEN 2 aur packages and 1 in repo but wrong db
  97. // WHEN defining as non specified targets
  98. // THEN all aur be found and cloned
  99. func TestPKGBUILDReposNotFound(t *testing.T) {
  100. t.Parallel()
  101. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  102. defer os.RemoveAll(dir)
  103. targets := []string{"extra/yay", "yay-bin", "yay-git"}
  104. cmdRunner := &testRunner{}
  105. cmdBuilder := &testGitBuilder{
  106. index: 0,
  107. test: t,
  108. parentBuilder: &exe.CmdBuilder{
  109. Runner: cmdRunner,
  110. GitBin: "/usr/local/bin/git",
  111. GitFlags: []string{},
  112. },
  113. }
  114. searcher := &testDBSearcher{
  115. absPackagesDB: map[string]string{"yay": "core"},
  116. }
  117. cloned, err := PKGBUILDRepos(searcher,
  118. cmdBuilder,
  119. targets, parser.ModeAny, "https://aur.archlinux.org", dir, false)
  120. assert.NoError(t, err)
  121. assert.EqualValues(t, map[string]bool{"yay-bin": true, "yay-git": true}, cloned)
  122. }
  123. // GIVEN 2 aur packages and 1 in repo
  124. // WHEN defining as non specified targets in repo mode
  125. // THEN only repo should be cloned
  126. func TestPKGBUILDReposRepoMode(t *testing.T) {
  127. t.Parallel()
  128. dir, _ := ioutil.TempDir("/tmp/", "yay-test")
  129. defer os.RemoveAll(dir)
  130. targets := []string{"yay", "yay-bin", "yay-git"}
  131. cmdRunner := &testRunner{}
  132. cmdBuilder := &testGitBuilder{
  133. index: 0,
  134. test: t,
  135. parentBuilder: &exe.CmdBuilder{
  136. Runner: cmdRunner,
  137. GitBin: "/usr/local/bin/git",
  138. GitFlags: []string{},
  139. },
  140. }
  141. searcher := &testDBSearcher{
  142. absPackagesDB: map[string]string{"yay": "core"},
  143. }
  144. cloned, err := PKGBUILDRepos(searcher,
  145. cmdBuilder,
  146. targets, parser.ModeRepo, "https://aur.archlinux.org", dir, false)
  147. assert.NoError(t, err)
  148. assert.EqualValues(t, map[string]bool{"yay": true}, cloned)
  149. }
  150. // GIVEN 2 aur packages and 1 in repo
  151. // WHEN defining as specified targets
  152. // THEN all aur be found and cloned
  153. func TestPKGBUILDFull(t *testing.T) {
  154. t.Parallel()
  155. gock.New("https://aur.archlinux.org").
  156. Get("/cgit/aur.git/plain/PKGBUILD").MatchParam("h", "yay-git").
  157. Reply(200).
  158. BodyString("example_yay-git")
  159. gock.New("https://aur.archlinux.org").
  160. Get("/cgit/aur.git/plain/PKGBUILD").MatchParam("h", "yay-bin").
  161. Reply(200).
  162. BodyString("example_yay-bin")
  163. gock.New("https://github.com/").
  164. Get("/archlinux/svntogit-packages/raw/packages/yay/trunk/PKGBUILD").
  165. Reply(200).
  166. BodyString("example_yay")
  167. defer gock.Off()
  168. targets := []string{"core/yay", "aur/yay-bin", "yay-git"}
  169. searcher := &testDBSearcher{
  170. absPackagesDB: map[string]string{"yay": "core"},
  171. }
  172. fetched, err := PKGBUILDs(searcher, &http.Client{},
  173. targets, "https://aur.archlinux.org", parser.ModeAny)
  174. assert.NoError(t, err)
  175. assert.EqualValues(t, map[string][]byte{
  176. "core/yay": []byte("example_yay"),
  177. "aur/yay-bin": []byte("example_yay-bin"),
  178. "yay-git": []byte("example_yay-git"),
  179. }, fetched)
  180. }