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.

user_avatar_test.go 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. "image/png"
  8. "io"
  9. "mime/multipart"
  10. "net/http"
  11. "net/url"
  12. "testing"
  13. "code.gitea.io/gitea/models/unittest"
  14. user_model "code.gitea.io/gitea/models/user"
  15. "code.gitea.io/gitea/modules/avatar"
  16. "github.com/stretchr/testify/assert"
  17. )
  18. func TestUserAvatar(t *testing.T) {
  19. onGiteaRun(t, func(t *testing.T, u *url.URL) {
  20. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // owner of the repo3, is an org
  21. seed := user2.Email
  22. if len(seed) == 0 {
  23. seed = user2.Name
  24. }
  25. img, err := avatar.RandomImage([]byte(seed))
  26. if err != nil {
  27. assert.NoError(t, err)
  28. return
  29. }
  30. session := loginUser(t, "user2")
  31. csrf := GetCSRF(t, session, "/user/settings")
  32. imgData := &bytes.Buffer{}
  33. body := &bytes.Buffer{}
  34. //Setup multi-part
  35. writer := multipart.NewWriter(body)
  36. writer.WriteField("source", "local")
  37. part, err := writer.CreateFormFile("avatar", "avatar-for-testuseravatar.png")
  38. if err != nil {
  39. assert.NoError(t, err)
  40. return
  41. }
  42. if err := png.Encode(imgData, img); err != nil {
  43. assert.NoError(t, err)
  44. return
  45. }
  46. if _, err := io.Copy(part, imgData); err != nil {
  47. assert.NoError(t, err)
  48. return
  49. }
  50. if err := writer.Close(); err != nil {
  51. assert.NoError(t, err)
  52. return
  53. }
  54. req := NewRequestWithBody(t, "POST", "/user/settings/avatar", body)
  55. req.Header.Add("X-Csrf-Token", csrf)
  56. req.Header.Add("Content-Type", writer.FormDataContentType())
  57. session.MakeRequest(t, req, http.StatusFound)
  58. user2 = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // owner of the repo3, is an org
  59. req = NewRequest(t, "GET", user2.AvatarLinkWithSize(0))
  60. _ = session.MakeRequest(t, req, http.StatusOK)
  61. // Can't test if the response matches because the image is re-generated on upload but checking that this at least doesn't give a 404 should be enough.
  62. })
  63. }