2022-12-09 07:35:56 +01:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package integration
import (
"bytes"
"fmt"
"io"
"mime/multipart"
"net/http"
"testing"
2023-01-17 16:46:03 -05:00
auth_model "code.gitea.io/gitea/models/auth"
2022-12-09 07:35:56 +01:00
issues_model "code.gitea.io/gitea/models/issues"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestAPIGetIssueAttachment ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
attachment := unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : 1 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : attachment . RepoID } )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { RepoID : attachment . IssueID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
session := loginUser ( t , repoOwner . Name )
token := getTokenForLoggedInUser ( t , session )
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/assets/%d?token=%s" ,
repoOwner . Name , repo . Name , issue . Index , attachment . ID , token )
req := NewRequest ( t , "GET" , urlStr )
resp := session . MakeRequest ( t , req , http . StatusOK )
apiAttachment := new ( api . Attachment )
DecodeJSON ( t , resp , & apiAttachment )
unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : apiAttachment . ID , IssueID : issue . ID } )
}
func TestAPIListIssueAttachments ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
attachment := unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : 1 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : attachment . RepoID } )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { RepoID : attachment . IssueID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
session := loginUser ( t , repoOwner . Name )
token := getTokenForLoggedInUser ( t , session )
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/assets?token=%s" ,
repoOwner . Name , repo . Name , issue . Index , token )
req := NewRequest ( t , "GET" , urlStr )
resp := session . MakeRequest ( t , req , http . StatusOK )
apiAttachment := new ( [ ] api . Attachment )
DecodeJSON ( t , resp , & apiAttachment )
unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : ( * apiAttachment ) [ 0 ] . ID , IssueID : issue . ID } )
}
func TestAPICreateIssueAttachment ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { RepoID : repo . ID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
session := loginUser ( t , repoOwner . Name )
2023-01-17 16:46:03 -05:00
token := getTokenForLoggedInUser ( t , session , auth_model . AccessTokenScopeRepo )
2022-12-09 07:35:56 +01:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/assets?token=%s" ,
repoOwner . Name , repo . Name , issue . Index , token )
filename := "image.png"
buff := generateImg ( )
body := & bytes . Buffer { }
// Setup multi-part
writer := multipart . NewWriter ( body )
part , err := writer . CreateFormFile ( "attachment" , filename )
assert . NoError ( t , err )
_ , err = io . Copy ( part , & buff )
assert . NoError ( t , err )
err = writer . Close ( )
assert . NoError ( t , err )
req := NewRequestWithBody ( t , "POST" , urlStr , body )
req . Header . Add ( "Content-Type" , writer . FormDataContentType ( ) )
resp := session . MakeRequest ( t , req , http . StatusCreated )
apiAttachment := new ( api . Attachment )
DecodeJSON ( t , resp , & apiAttachment )
unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : apiAttachment . ID , IssueID : issue . ID } )
}
func TestAPIEditIssueAttachment ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
const newAttachmentName = "newAttachmentName"
attachment := unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : 1 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : attachment . RepoID } )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { RepoID : attachment . IssueID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
session := loginUser ( t , repoOwner . Name )
2023-01-17 16:46:03 -05:00
token := getTokenForLoggedInUser ( t , session , auth_model . AccessTokenScopeRepo )
2022-12-09 07:35:56 +01:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/assets/%d?token=%s" ,
repoOwner . Name , repo . Name , issue . Index , attachment . ID , token )
req := NewRequestWithValues ( t , "PATCH" , urlStr , map [ string ] string {
"name" : newAttachmentName ,
} )
resp := session . MakeRequest ( t , req , http . StatusCreated )
apiAttachment := new ( api . Attachment )
DecodeJSON ( t , resp , & apiAttachment )
unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : apiAttachment . ID , IssueID : issue . ID , Name : apiAttachment . Name } )
}
func TestAPIDeleteIssueAttachment ( t * testing . T ) {
defer tests . PrepareTestEnv ( t ) ( )
attachment := unittest . AssertExistsAndLoadBean ( t , & repo_model . Attachment { ID : 1 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : attachment . RepoID } )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { RepoID : attachment . IssueID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
session := loginUser ( t , repoOwner . Name )
2023-01-17 16:46:03 -05:00
token := getTokenForLoggedInUser ( t , session , auth_model . AccessTokenScopeRepo )
2022-12-09 07:35:56 +01:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/assets/%d?token=%s" ,
repoOwner . Name , repo . Name , issue . Index , attachment . ID , token )
req := NewRequest ( t , "DELETE" , urlStr )
session . MakeRequest ( t , req , http . StatusNoContent )
unittest . AssertNotExistsBean ( t , & repo_model . Attachment { ID : attachment . ID , IssueID : issue . ID } )
}