completion_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //go:build !integration
  2. // +build !integration
  3. package completion
  4. import (
  5. "bytes"
  6. "context"
  7. "errors"
  8. "io"
  9. "net/http"
  10. "testing"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. const samplePackageResp = `
  14. # AUR package list, generated on Fri, 24 Jul 2020 22:05:22 GMT
  15. cytadela
  16. bitefusion
  17. globs-svn
  18. ri-li
  19. globs-benchmarks-svn
  20. dunelegacy
  21. lumina
  22. eternallands-sound
  23. `
  24. const expectPackageCompletion = `cytadela AUR
  25. bitefusion AUR
  26. globs-svn AUR
  27. ri-li AUR
  28. globs-benchmarks-svn AUR
  29. dunelegacy AUR
  30. lumina AUR
  31. eternallands-sound AUR
  32. `
  33. type mockDoer struct {
  34. t *testing.T
  35. returnBody string
  36. returnStatusCode int
  37. returnErr error
  38. wantUrl string
  39. }
  40. func (m *mockDoer) Do(req *http.Request) (*http.Response, error) {
  41. assert.Equal(m.t, m.wantUrl, req.URL.String())
  42. return &http.Response{
  43. StatusCode: m.returnStatusCode,
  44. Body: io.NopCloser(bytes.NewBufferString(m.returnBody)),
  45. }, m.returnErr
  46. }
  47. func Test_createAURList(t *testing.T) {
  48. t.Parallel()
  49. doer := &mockDoer{
  50. t: t,
  51. wantUrl: "https://aur.archlinux.org/packages.gz",
  52. returnStatusCode: 200,
  53. returnBody: samplePackageResp,
  54. returnErr: nil,
  55. }
  56. out := &bytes.Buffer{}
  57. err := createAURList(context.Background(), doer, "https://aur.archlinux.org", out)
  58. assert.NoError(t, err)
  59. gotOut := out.String()
  60. assert.Equal(t, expectPackageCompletion, gotOut)
  61. }
  62. func Test_createAURListHTTPError(t *testing.T) {
  63. t.Parallel()
  64. doer := &mockDoer{
  65. t: t,
  66. wantUrl: "https://aur.archlinux.org/packages.gz",
  67. returnStatusCode: 200,
  68. returnBody: samplePackageResp,
  69. returnErr: errors.New("Not available"),
  70. }
  71. out := &bytes.Buffer{}
  72. err := createAURList(context.Background(), doer, "https://aur.archlinux.org", out)
  73. assert.EqualError(t, err, "Not available")
  74. }
  75. func Test_createAURListStatusError(t *testing.T) {
  76. t.Parallel()
  77. doer := &mockDoer{
  78. t: t,
  79. wantUrl: "https://aur.archlinux.org/packages.gz",
  80. returnStatusCode: 503,
  81. returnBody: samplePackageResp,
  82. returnErr: nil,
  83. }
  84. out := &bytes.Buffer{}
  85. err := createAURList(context.Background(), doer, "https://aur.archlinux.org", out)
  86. assert.EqualError(t, err, "invalid status code: 503")
  87. }