2017-06-18 12:06:17 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-06-18 12:06:17 +03:00
2022-09-02 22:18:23 +03:00
package integration
2017-06-18 12:06:17 +03:00
import (
2017-07-14 01:33:26 +03:00
"fmt"
2017-06-18 12:06:17 +03:00
"net/http"
2020-01-13 19:02:24 +03:00
"net/url"
2017-06-18 12:06:17 +03:00
"testing"
2023-01-18 00:46:03 +03:00
auth_model "code.gitea.io/gitea/models/auth"
2022-11-19 11:12:33 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2021-12-10 04:27:50 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-16 11:53:21 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2022-12-29 05:57:15 +03:00
"code.gitea.io/gitea/services/convert"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2017-06-18 12:06:17 +03:00
"github.com/stretchr/testify/assert"
)
2017-07-14 01:33:26 +03:00
func TestAPIListRepoComments ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-07-14 01:33:26 +03:00
2022-06-13 12:37:59 +03:00
comment := unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { } ,
2022-08-16 05:22:25 +03:00
unittest . Cond ( "type = ?" , issues_model . CommentTypeComment ) )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : comment . IssueID } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
2017-07-14 01:33:26 +03:00
2020-01-13 19:02:24 +03:00
link , _ := url . Parse ( fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/comments" , repoOwner . Name , repo . Name ) )
req := NewRequest ( t , "GET" , link . String ( ) )
2022-12-02 06:39:42 +03:00
resp := MakeRequest ( t , req , http . StatusOK )
2017-07-14 01:33:26 +03:00
var apiComments [ ] * api . Comment
DecodeJSON ( t , resp , & apiComments )
2020-01-13 19:02:24 +03:00
assert . Len ( t , apiComments , 2 )
2017-07-14 01:33:26 +03:00
for _ , apiComment := range apiComments {
2022-06-13 12:37:59 +03:00
c := & issues_model . Comment { ID : apiComment . ID }
2021-11-16 11:53:21 +03:00
unittest . AssertExistsAndLoadBean ( t , c ,
2022-06-13 12:37:59 +03:00
unittest . Cond ( "type = ?" , issues_model . CommentTypeComment ) )
unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : c . IssueID , RepoID : repo . ID } )
2017-07-14 01:33:26 +03:00
}
2020-01-13 19:02:24 +03:00
2022-01-20 20:46:10 +03:00
// test before and since filters
2020-01-13 19:02:24 +03:00
query := url . Values { }
2022-01-20 20:46:10 +03:00
before := "2000-01-01T00:00:11+00:00" // unix: 946684811
since := "2000-01-01T00:00:12+00:00" // unix: 946684812
2020-01-13 19:02:24 +03:00
query . Add ( "before" , before )
link . RawQuery = query . Encode ( )
req = NewRequest ( t , "GET" , link . String ( ) )
2022-12-02 06:39:42 +03:00
resp = MakeRequest ( t , req , http . StatusOK )
2020-01-13 19:02:24 +03:00
DecodeJSON ( t , resp , & apiComments )
assert . Len ( t , apiComments , 1 )
assert . EqualValues ( t , 2 , apiComments [ 0 ] . ID )
query . Del ( "before" )
query . Add ( "since" , since )
link . RawQuery = query . Encode ( )
req = NewRequest ( t , "GET" , link . String ( ) )
2022-12-02 06:39:42 +03:00
resp = MakeRequest ( t , req , http . StatusOK )
2020-01-13 19:02:24 +03:00
DecodeJSON ( t , resp , & apiComments )
assert . Len ( t , apiComments , 1 )
assert . EqualValues ( t , 3 , apiComments [ 0 ] . ID )
2017-07-14 01:33:26 +03:00
}
func TestAPIListIssueComments ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-06-18 12:06:17 +03:00
2022-06-13 12:37:59 +03:00
comment := unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { } ,
2022-08-16 05:22:25 +03:00
unittest . Cond ( "type = ?" , issues_model . CommentTypeComment ) )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : comment . IssueID } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
2017-06-18 12:06:17 +03:00
2023-01-18 00:46:03 +03:00
token := getUserToken ( t , repoOwner . Name , auth_model . AccessTokenScopeRepo )
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/%s/issues/%d/comments?token=%s" ,
repoOwner . Name , repo . Name , issue . Index , token )
2022-12-02 06:39:42 +03:00
resp := MakeRequest ( t , req , http . StatusOK )
2017-06-18 12:06:17 +03:00
var comments [ ] * api . Comment
DecodeJSON ( t , resp , & comments )
2022-06-13 12:37:59 +03:00
expectedCount := unittest . GetCount ( t , & issues_model . Comment { IssueID : issue . ID } ,
unittest . Cond ( "type = ?" , issues_model . CommentTypeComment ) )
2017-06-18 12:06:17 +03:00
assert . EqualValues ( t , expectedCount , len ( comments ) )
}
2017-07-14 01:33:26 +03:00
func TestAPICreateComment ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-07-14 01:33:26 +03:00
const commentBody = "Comment body"
2022-08-16 05:22:25 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
2017-07-14 01:33:26 +03:00
2023-01-18 00:46:03 +03:00
token := getUserToken ( t , repoOwner . Name , auth_model . AccessTokenScopeRepo )
2018-09-10 19:15:52 +03:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/comments?token=%s" ,
repoOwner . Name , repo . Name , issue . Index , token )
2017-07-14 01:33:26 +03:00
req := NewRequestWithValues ( t , "POST" , urlStr , map [ string ] string {
"body" : commentBody ,
} )
2022-12-02 06:39:42 +03:00
resp := MakeRequest ( t , req , http . StatusCreated )
2017-07-14 01:33:26 +03:00
var updatedComment api . Comment
DecodeJSON ( t , resp , & updatedComment )
assert . EqualValues ( t , commentBody , updatedComment . Body )
2022-06-13 12:37:59 +03:00
unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { ID : updatedComment . ID , IssueID : issue . ID , Content : commentBody } )
2017-07-14 01:33:26 +03:00
}
2020-01-08 10:00:59 +03:00
func TestAPIGetComment ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2020-01-08 10:00:59 +03:00
2022-08-16 05:22:25 +03:00
comment := unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { ID : 2 } )
2022-11-19 11:12:33 +03:00
assert . NoError ( t , comment . LoadIssue ( db . DefaultContext ) )
2022-08-16 05:22:25 +03:00
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : comment . Issue . RepoID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
2020-01-08 10:00:59 +03:00
2023-01-18 00:46:03 +03:00
token := getUserToken ( t , repoOwner . Name , auth_model . AccessTokenScopeRepo )
2020-01-08 10:00:59 +03:00
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/%s/issues/comments/%d" , repoOwner . Name , repo . Name , comment . ID )
2022-12-02 06:39:42 +03:00
MakeRequest ( t , req , http . StatusOK )
2020-01-08 10:00:59 +03:00
req = NewRequestf ( t , "GET" , "/api/v1/repos/%s/%s/issues/comments/%d?token=%s" , repoOwner . Name , repo . Name , comment . ID , token )
2022-12-02 06:39:42 +03:00
resp := MakeRequest ( t , req , http . StatusOK )
2020-01-08 10:00:59 +03:00
var apiComment api . Comment
DecodeJSON ( t , resp , & apiComment )
2022-11-19 11:12:33 +03:00
assert . NoError ( t , comment . LoadPoster ( db . DefaultContext ) )
2020-10-17 07:23:08 +03:00
expect := convert . ToComment ( comment )
2020-01-08 10:00:59 +03:00
assert . Equal ( t , expect . ID , apiComment . ID )
assert . Equal ( t , expect . Poster . FullName , apiComment . Poster . FullName )
assert . Equal ( t , expect . Body , apiComment . Body )
assert . Equal ( t , expect . Created . Unix ( ) , apiComment . Created . Unix ( ) )
}
2017-07-14 01:33:26 +03:00
func TestAPIEditComment ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-07-14 01:33:26 +03:00
const newCommentBody = "This is the new comment body"
2022-06-13 12:37:59 +03:00
comment := unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { } ,
2022-08-16 05:22:25 +03:00
unittest . Cond ( "type = ?" , issues_model . CommentTypeComment ) )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : comment . IssueID } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
2017-07-14 01:33:26 +03:00
2023-01-18 00:46:03 +03:00
token := getUserToken ( t , repoOwner . Name , auth_model . AccessTokenScopeRepo )
2018-09-10 19:15:52 +03:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/comments/%d?token=%s" ,
repoOwner . Name , repo . Name , comment . ID , token )
2017-07-14 01:33:26 +03:00
req := NewRequestWithValues ( t , "PATCH" , urlStr , map [ string ] string {
"body" : newCommentBody ,
} )
2022-12-02 06:39:42 +03:00
resp := MakeRequest ( t , req , http . StatusOK )
2017-07-14 01:33:26 +03:00
var updatedComment api . Comment
DecodeJSON ( t , resp , & updatedComment )
assert . EqualValues ( t , comment . ID , updatedComment . ID )
assert . EqualValues ( t , newCommentBody , updatedComment . Body )
2022-06-13 12:37:59 +03:00
unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { ID : comment . ID , IssueID : issue . ID , Content : newCommentBody } )
2017-07-14 01:33:26 +03:00
}
func TestAPIDeleteComment ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2017-07-14 01:33:26 +03:00
2022-06-13 12:37:59 +03:00
comment := unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { } ,
2022-08-16 05:22:25 +03:00
unittest . Cond ( "type = ?" , issues_model . CommentTypeComment ) )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : comment . IssueID } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
2017-07-14 01:33:26 +03:00
2023-01-18 00:46:03 +03:00
token := getUserToken ( t , repoOwner . Name , auth_model . AccessTokenScopeRepo )
2018-09-10 19:15:52 +03:00
req := NewRequestf ( t , "DELETE" , "/api/v1/repos/%s/%s/issues/comments/%d?token=%s" ,
repoOwner . Name , repo . Name , comment . ID , token )
2022-12-02 06:39:42 +03:00
MakeRequest ( t , req , http . StatusNoContent )
2017-07-14 01:33:26 +03:00
2022-06-13 12:37:59 +03:00
unittest . AssertNotExistsBean ( t , & issues_model . Comment { ID : comment . ID } )
2017-07-14 01:33:26 +03:00
}
2022-01-01 17:12:25 +03:00
func TestAPIListIssueTimeline ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2022-01-01 17:12:25 +03:00
// load comment
2022-08-16 05:22:25 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 1 } )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
repoOwner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } )
2022-01-01 17:12:25 +03:00
// make request
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/%s/issues/%d/timeline" ,
repoOwner . Name , repo . Name , issue . Index )
2022-12-02 06:39:42 +03:00
resp := MakeRequest ( t , req , http . StatusOK )
2022-01-01 17:12:25 +03:00
// check if lens of list returned by API and
// lists extracted directly from DB are the same
var comments [ ] * api . TimelineComment
DecodeJSON ( t , resp , & comments )
2022-06-13 12:37:59 +03:00
expectedCount := unittest . GetCount ( t , & issues_model . Comment { IssueID : issue . ID } )
2022-01-01 17:12:25 +03:00
assert . EqualValues ( t , expectedCount , len ( comments ) )
}