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  }