You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

api_packages_generic_test.go 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package integrations
  5. import (
  6. "bytes"
  7. "fmt"
  8. "net/http"
  9. "testing"
  10. "code.gitea.io/gitea/models/db"
  11. "code.gitea.io/gitea/models/packages"
  12. "code.gitea.io/gitea/models/unittest"
  13. user_model "code.gitea.io/gitea/models/user"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestPackageGeneric(t *testing.T) {
  17. defer prepareTestEnv(t)()
  18. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  19. packageName := "te-st_pac.kage"
  20. packageVersion := "1.0.3"
  21. filename := "fi-le_na.me"
  22. content := []byte{1, 2, 3}
  23. url := fmt.Sprintf("/api/packages/%s/generic/%s/%s/%s", user.Name, packageName, packageVersion, filename)
  24. t.Run("Upload", func(t *testing.T) {
  25. defer PrintCurrentTest(t)()
  26. req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(content))
  27. AddBasicAuthHeader(req, user.Name)
  28. MakeRequest(t, req, http.StatusCreated)
  29. pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeGeneric)
  30. assert.NoError(t, err)
  31. assert.Len(t, pvs, 1)
  32. pd, err := packages.GetPackageDescriptor(db.DefaultContext, pvs[0])
  33. assert.NoError(t, err)
  34. assert.NotNil(t, pd.SemVer)
  35. assert.Nil(t, pd.Metadata)
  36. assert.Equal(t, packageName, pd.Package.Name)
  37. assert.Equal(t, packageVersion, pd.Version.Version)
  38. pfs, err := packages.GetFilesByVersionID(db.DefaultContext, pvs[0].ID)
  39. assert.NoError(t, err)
  40. assert.Len(t, pfs, 1)
  41. assert.Equal(t, filename, pfs[0].Name)
  42. assert.True(t, pfs[0].IsLead)
  43. pb, err := packages.GetBlobByID(db.DefaultContext, pfs[0].BlobID)
  44. assert.NoError(t, err)
  45. assert.Equal(t, int64(len(content)), pb.Size)
  46. })
  47. t.Run("UploadExists", func(t *testing.T) {
  48. defer PrintCurrentTest(t)()
  49. req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(content))
  50. AddBasicAuthHeader(req, user.Name)
  51. MakeRequest(t, req, http.StatusBadRequest)
  52. })
  53. t.Run("Download", func(t *testing.T) {
  54. defer PrintCurrentTest(t)()
  55. req := NewRequest(t, "GET", url)
  56. resp := MakeRequest(t, req, http.StatusOK)
  57. assert.Equal(t, content, resp.Body.Bytes())
  58. pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeGeneric)
  59. assert.NoError(t, err)
  60. assert.Len(t, pvs, 1)
  61. assert.Equal(t, int64(1), pvs[0].DownloadCount)
  62. })
  63. t.Run("Delete", func(t *testing.T) {
  64. defer PrintCurrentTest(t)()
  65. req := NewRequest(t, "DELETE", url)
  66. AddBasicAuthHeader(req, user.Name)
  67. MakeRequest(t, req, http.StatusOK)
  68. pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeGeneric)
  69. assert.NoError(t, err)
  70. assert.Empty(t, pvs)
  71. })
  72. t.Run("DownloadNotExists", func(t *testing.T) {
  73. defer PrintCurrentTest(t)()
  74. req := NewRequest(t, "GET", url)
  75. MakeRequest(t, req, http.StatusNotFound)
  76. })
  77. t.Run("DeleteNotExists", func(t *testing.T) {
  78. defer PrintCurrentTest(t)()
  79. req := NewRequest(t, "DELETE", url)
  80. AddBasicAuthHeader(req, user.Name)
  81. MakeRequest(t, req, http.StatusNotFound)
  82. })
  83. }