completion_test.go 2.1 KB

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