gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2018 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "encoding/base64"
  6. "fmt"
  7. "net/http"
  8. "os"
  9. "testing"
  10. auth_model "code.gitea.io/gitea/models/auth"
  11. repo_model "code.gitea.io/gitea/models/repo"
  12. "code.gitea.io/gitea/models/unittest"
  13. user_model "code.gitea.io/gitea/models/user"
  14. api "code.gitea.io/gitea/modules/structs"
  15. "code.gitea.io/gitea/tests"
  16. "github.com/stretchr/testify/assert"
  17. )
  18. func TestAPIUpdateRepoAvatar(t *testing.T) {
  19. defer tests.PrepareTestEnv(t)()
  20. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
  21. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  22. token := getUserToken(t, user2.LowerName, auth_model.AccessTokenScopeWriteRepository)
  23. // Test what happens if you use a valid image
  24. avatar, err := os.ReadFile("tests/integration/avatar.png")
  25. assert.NoError(t, err)
  26. if err != nil {
  27. assert.FailNow(t, "Unable to open avatar.png")
  28. }
  29. opts := api.UpdateRepoAvatarOption{
  30. Image: base64.StdEncoding.EncodeToString(avatar),
  31. }
  32. req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/avatar", repo.OwnerName, repo.Name), &opts).
  33. AddTokenAuth(token)
  34. MakeRequest(t, req, http.StatusNoContent)
  35. // Test what happens if you don't have a valid Base64 string
  36. opts = api.UpdateRepoAvatarOption{
  37. Image: "Invalid",
  38. }
  39. req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/avatar", repo.OwnerName, repo.Name), &opts).
  40. AddTokenAuth(token)
  41. MakeRequest(t, req, http.StatusBadRequest)
  42. // Test what happens if you use a file that is not an image
  43. text, err := os.ReadFile("tests/integration/README.md")
  44. assert.NoError(t, err)
  45. if err != nil {
  46. assert.FailNow(t, "Unable to open README.md")
  47. }
  48. opts = api.UpdateRepoAvatarOption{
  49. Image: base64.StdEncoding.EncodeToString(text),
  50. }
  51. req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/avatar", repo.OwnerName, repo.Name), &opts).
  52. AddTokenAuth(token)
  53. MakeRequest(t, req, http.StatusInternalServerError)
  54. }
  55. func TestAPIDeleteRepoAvatar(t *testing.T) {
  56. defer tests.PrepareTestEnv(t)()
  57. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
  58. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  59. token := getUserToken(t, user2.LowerName, auth_model.AccessTokenScopeWriteRepository)
  60. req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/%s/avatar", repo.OwnerName, repo.Name)).
  61. AddTokenAuth(token)
  62. MakeRequest(t, req, http.StatusNoContent)
  63. }