2017-06-30 19:50:57 +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-08-13 22:04:39 +03:00
"fmt"
2017-06-30 19:50:57 +03:00
"net/http"
"testing"
"code.gitea.io/gitea/models"
2018-08-13 22:04:39 +03:00
"code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/setting"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2019-10-11 09:44:43 +03:00
issue_service "code.gitea.io/gitea/services/issue"
2017-06-30 19:50:57 +03:00
"github.com/stretchr/testify/assert"
)
func TestAPIViewPulls ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-06-30 19:50:57 +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 , "user2" )
2018-09-10 19:15:52 +03:00
token := getTokenForLoggedInUser ( t , session )
req := NewRequestf ( t , "GET" , "/api/v1/repos/%s/%s/pulls?state=all&token=" + token , owner . Name , repo . Name )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
2017-06-30 19:50:57 +03:00
var pulls [ ] * api . PullRequest
DecodeJSON ( t , resp , & pulls )
expectedLen := models . GetCount ( t , & models . Issue { RepoID : repo . ID } , models . Cond ( "is_pull = ?" , true ) )
assert . Len ( t , pulls , expectedLen )
}
2018-08-13 22:04:39 +03:00
// TestAPIMergePullWIP ensures that we can't merge a WIP pull request
func TestAPIMergePullWIP ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2018-08-13 22:04:39 +03:00
repo := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 1 } ) . ( * models . Repository )
owner := models . AssertExistsAndLoadBean ( t , & models . User { ID : repo . OwnerID } ) . ( * models . User )
pr := models . AssertExistsAndLoadBean ( t , & models . PullRequest { Status : models . PullRequestStatusMergeable } , models . Cond ( "has_merged = ?" , false ) ) . ( * models . PullRequest )
pr . LoadIssue ( )
2019-10-11 09:44:43 +03:00
issue_service . ChangeTitle ( pr . Issue , owner , setting . Repository . PullRequest . WorkInProgressPrefixes [ 0 ] + " " + pr . Issue . Title )
2018-08-13 22:04:39 +03:00
// force reload
pr . LoadAttributes ( )
assert . Contains ( t , pr . Issue . Title , setting . Repository . PullRequest . WorkInProgressPrefixes [ 0 ] )
session := loginUser ( t , owner . Name )
2018-09-10 19:15:52 +03:00
token := getTokenForLoggedInUser ( t , session )
req := NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls/%d/merge?token=%s" , owner . Name , repo . Name , pr . Index , token ) , & auth . MergePullRequestForm {
2018-08-13 22:04:39 +03:00
MergeMessageField : pr . Issue . Title ,
Do : string ( models . MergeStyleMerge ) ,
} )
session . MakeRequest ( t , req , http . StatusMethodNotAllowed )
}
2019-05-07 20:20:23 +03:00
2020-06-07 22:13:40 +03:00
func TestAPICreatePullSuccess ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2019-05-07 20:20:23 +03:00
repo10 := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 10 } ) . ( * models . Repository )
// repo10 have code, pulls units.
repo11 := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 11 } ) . ( * models . Repository )
// repo11 only have code unit but should still create pulls
owner10 := models . AssertExistsAndLoadBean ( t , & models . User { ID : repo10 . OwnerID } ) . ( * models . User )
owner11 := models . AssertExistsAndLoadBean ( t , & models . User { ID : repo11 . OwnerID } ) . ( * models . User )
session := loginUser ( t , owner11 . Name )
token := getTokenForLoggedInUser ( t , session )
req := NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls?token=%s" , owner10 . Name , repo10 . Name , token ) , & api . CreatePullRequestOption {
Head : fmt . Sprintf ( "%s:master" , owner11 . Name ) ,
Base : "master" ,
Title : "create a failure pr" ,
} )
session . MakeRequest ( t , req , 201 )
}
2020-06-07 22:13:40 +03:00
func TestAPIEditPull ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2019-05-07 20:20:23 +03:00
repo10 := models . AssertExistsAndLoadBean ( t , & models . Repository { ID : 10 } ) . ( * models . Repository )
owner10 := models . AssertExistsAndLoadBean ( t , & models . User { ID : repo10 . OwnerID } ) . ( * models . User )
session := loginUser ( t , owner10 . Name )
token := getTokenForLoggedInUser ( t , session )
req := NewRequestWithJSON ( t , http . MethodPost , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls?token=%s" , owner10 . Name , repo10 . Name , token ) , & api . CreatePullRequestOption {
Head : "develop" ,
Base : "master" ,
Title : "create a success pr" ,
} )
2020-06-07 22:13:40 +03:00
pull := new ( api . PullRequest )
resp := session . MakeRequest ( t , req , 201 )
DecodeJSON ( t , resp , pull )
assert . EqualValues ( t , "master" , pull . Base . Name )
req = NewRequestWithJSON ( t , http . MethodPatch , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls/%d?token=%s" , owner10 . Name , repo10 . Name , pull . Index , token ) , & api . EditPullRequestOption {
Base : "feature/1" ,
Title : "edit a this pr" ,
} )
resp = session . MakeRequest ( t , req , 201 )
DecodeJSON ( t , resp , pull )
assert . EqualValues ( t , "feature/1" , pull . Base . Name )
2019-05-07 20:20:23 +03:00
2020-06-07 22:13:40 +03:00
req = NewRequestWithJSON ( t , http . MethodPatch , fmt . Sprintf ( "/api/v1/repos/%s/%s/pulls/%d?token=%s" , owner10 . Name , repo10 . Name , pull . Index , token ) , & api . EditPullRequestOption {
Base : "not-exist" ,
} )
session . MakeRequest ( t , req , 404 )
2019-05-07 20:20:23 +03:00
}