aur_test.go 3.5 KB

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