2017-06-25 17:51:07 +03:00
// Copyright 2017 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 integrations
import (
2018-09-13 05:33:48 +03:00
"fmt"
2017-06-25 17:51:07 +03:00
"net/http"
2020-01-12 09:35:11 +03:00
"net/url"
2017-06-25 17:51:07 +03:00
"testing"
"code.gitea.io/gitea/models"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2017-06-25 17:51:07 +03:00
"github.com/stretchr/testify/assert"
)
func TestAPIListIssues ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-06-25 17:51:07 +03:00
repo := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 1 } ) . ( * models . Repository )
owner := models . AssertExistsAndLoadBean ( t , & models . User { ID : repo . OwnerID } ) . ( * models . User )
session := loginUser ( t , owner . Name )
2018-09-10 19:15:52 +03:00
token := getTokenForLoggedInUser ( t , session )
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/%s/issues?state=all&token=%s" ,
owner . Name , repo . Name , token )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-06-25 17:51:07 +03:00
var apiIssues [ ] * api . Issue
DecodeJSON ( t , resp , & apiIssues )
assert . Len ( t , apiIssues , models . GetCount ( t , & models . Issue { RepoID : repo . ID } ) )
for _ , apiIssue := range apiIssues {
models . AssertExistsAndLoadBean ( t , & models . Issue { ID : apiIssue . ID , RepoID : repo . ID } )
}
}
func TestAPICreateIssue ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-06-25 17:51:07 +03:00
const body , title = "apiTestBody" , "apiTestTitle"
repo := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 1 } ) . ( * models . Repository )
owner := models . AssertExistsAndLoadBean ( t , & models . User { ID : repo . OwnerID } ) . ( * models . User )
session := loginUser ( t , owner . Name )
2018-09-10 19:15:52 +03:00
token := getTokenForLoggedInUser ( t , session )
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues?state=all&token=%s" , owner . Name , repo . Name , token )
2017-06-25 17:51:07 +03:00
req := NewRequestWithJSON ( t , "POST" , urlStr , & api . CreateIssueOption {
Body : body ,
Title : title ,
Assignee : owner . Name ,
} )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusCreated )
2017-06-25 17:51:07 +03:00
var apiIssue api . Issue
DecodeJSON ( t , resp , & apiIssue )
assert . Equal ( t , apiIssue . Body , body )
assert . Equal ( t , apiIssue . Title , title )
models . AssertExistsAndLoadBean ( t , & models . Issue {
RepoID : repo . ID ,
AssigneeID : owner . ID ,
Content : body ,
Title : title ,
} )
}
2020-01-02 01:51:10 +03:00
func TestAPIEditIssue ( t * testing . T ) {
defer prepareTestEnv ( t ) ( )
issueBefore := models . AssertExistsAndLoadBean ( t , & models . Issue { ID : 10 } ) . ( * models . Issue )
repo := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : issueBefore . RepoID } ) . ( * models . Repository )
owner := models . AssertExistsAndLoadBean ( t , & models . User { ID : repo . OwnerID } ) . ( * models . User )
assert . NoError ( t , issueBefore . LoadAttributes ( ) )
assert . Equal ( t , int64 ( 1019307200 ) , int64 ( issueBefore . DeadlineUnix ) )
assert . Equal ( t , api . StateOpen , issueBefore . State ( ) )
session := loginUser ( t , owner . Name )
token := getTokenForLoggedInUser ( t , session )
// update values of issue
issueState := "closed"
removeDeadline := true
milestone := int64 ( 4 )
body := "new content!"
title := "new title from api set"
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d?token=%s" , owner . Name , repo . Name , issueBefore . Index , token )
req := NewRequestWithJSON ( t , "PATCH" , urlStr , api . EditIssueOption {
State : & issueState ,
RemoveDeadline : & removeDeadline ,
Milestone : & milestone ,
Body : & body ,
Title : title ,
// ToDo change more
} )
resp := session . MakeRequest ( t , req , http . StatusCreated )
var apiIssue api . Issue
DecodeJSON ( t , resp , & apiIssue )
issueAfter := models . AssertExistsAndLoadBean ( t , & models . Issue { ID : 10 } ) . ( * models . Issue )
// check deleted user
assert . Equal ( t , int64 ( 500 ) , issueAfter . PosterID )
assert . NoError ( t , issueAfter . LoadAttributes ( ) )
assert . Equal ( t , int64 ( - 1 ) , issueAfter . PosterID )
assert . Equal ( t , int64 ( - 1 ) , issueBefore . PosterID )
assert . Equal ( t , int64 ( - 1 ) , apiIssue . Poster . ID )
// API response
assert . Equal ( t , api . StateClosed , apiIssue . State )
assert . Equal ( t , milestone , apiIssue . Milestone . ID )
assert . Equal ( t , body , apiIssue . Body )
assert . True ( t , apiIssue . Deadline == nil )
assert . Equal ( t , title , apiIssue . Title )
// in database
assert . Equal ( t , api . StateClosed , issueAfter . State ( ) )
assert . Equal ( t , milestone , issueAfter . MilestoneID )
assert . Equal ( t , int64 ( 0 ) , int64 ( issueAfter . DeadlineUnix ) )
assert . Equal ( t , body , issueAfter . Content )
assert . Equal ( t , title , issueAfter . Title )
}
2020-01-12 09:35:11 +03:00
func TestAPISearchIssue ( t * testing . T ) {
defer prepareTestEnv ( t ) ( )
session := loginUser ( t , "user2" )
token := getTokenForLoggedInUser ( t , session )
link , _ := url . Parse ( "/api/v1/repos/issues/search" )
req := NewRequest ( t , "GET" , link . String ( ) )
resp := session . MakeRequest ( t , req , http . StatusOK )
var apiIssues [ ] * api . Issue
DecodeJSON ( t , resp , & apiIssues )
2020-01-17 09:03:40 +03:00
assert . Len ( t , apiIssues , 9 )
2020-01-12 09:35:11 +03:00
query := url . Values { }
query . Add ( "token" , token )
link . RawQuery = query . Encode ( )
req = NewRequest ( t , "GET" , link . String ( ) )
resp = session . MakeRequest ( t , req , http . StatusOK )
DecodeJSON ( t , resp , & apiIssues )
2020-01-17 09:03:40 +03:00
assert . Len ( t , apiIssues , 9 )
2020-01-12 09:35:11 +03:00
query . Add ( "state" , "closed" )
link . RawQuery = query . Encode ( )
req = NewRequest ( t , "GET" , link . String ( ) )
resp = session . MakeRequest ( t , req , http . StatusOK )
DecodeJSON ( t , resp , & apiIssues )
assert . Len ( t , apiIssues , 2 )
query . Set ( "state" , "all" )
link . RawQuery = query . Encode ( )
req = NewRequest ( t , "GET" , link . String ( ) )
resp = session . MakeRequest ( t , req , http . StatusOK )
DecodeJSON ( t , resp , & apiIssues )
assert . Len ( t , apiIssues , 10 ) //there are more but 10 is page item limit
query . Add ( "page" , "2" )
link . RawQuery = query . Encode ( )
req = NewRequest ( t , "GET" , link . String ( ) )
resp = session . MakeRequest ( t , req , http . StatusOK )
DecodeJSON ( t , resp , & apiIssues )
2020-01-17 09:03:40 +03:00
assert . Len ( t , apiIssues , 1 )
2020-01-12 09:35:11 +03:00
}