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