unified_test.go 5.4 KB

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