2020-04-21 16:48:53 +03:00
// Copyright 2020 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 (
"fmt"
"net/http"
"testing"
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"
2020-04-21 16:48:53 +03:00
api "code.gitea.io/gitea/modules/structs"
"github.com/stretchr/testify/assert"
)
func TestAPIIssueSubscriptions ( t * testing . T ) {
defer prepareTestEnv ( t ) ( )
2022-06-13 12:37:59 +03:00
issue1 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 1 } ) . ( * issues_model . Issue )
issue2 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 2 } ) . ( * issues_model . Issue )
issue3 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 3 } ) . ( * issues_model . Issue )
issue4 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 4 } ) . ( * issues_model . Issue )
issue5 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 8 } ) . ( * issues_model . Issue )
2020-04-21 16:48:53 +03:00
2021-11-24 12:49:20 +03:00
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : issue1 . PosterID } ) . ( * user_model . User )
2020-04-21 16:48:53 +03:00
session := loginUser ( t , owner . Name )
token := getTokenForLoggedInUser ( t , session )
2022-06-13 12:37:59 +03:00
testSubscription := func ( issue * issues_model . Issue , isWatching bool ) {
2021-12-10 04:27:50 +03:00
issueRepo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } ) . ( * repo_model . Repository )
2020-04-21 16:48:53 +03:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/subscriptions/check?token=%s" , issueRepo . OwnerName , issueRepo . Name , issue . Index , token )
req := NewRequest ( t , "GET" , urlStr )
resp := session . MakeRequest ( t , req , http . StatusOK )
wi := new ( api . WatchInfo )
DecodeJSON ( t , resp , wi )
assert . EqualValues ( t , isWatching , wi . Subscribed )
assert . EqualValues ( t , ! isWatching , wi . Ignored )
assert . EqualValues ( t , issue . APIURL ( ) + "/subscriptions" , wi . URL )
assert . EqualValues ( t , issue . CreatedUnix , wi . CreatedAt . Unix ( ) )
assert . EqualValues ( t , issueRepo . APIURL ( ) , wi . RepositoryURL )
}
testSubscription ( issue1 , true )
testSubscription ( issue2 , true )
testSubscription ( issue3 , true )
testSubscription ( issue4 , false )
testSubscription ( issue5 , false )
2021-12-10 04:27:50 +03:00
issue1Repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue1 . RepoID } ) . ( * repo_model . Repository )
2020-04-21 16:48:53 +03:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/subscriptions/%s?token=%s" , issue1Repo . OwnerName , issue1Repo . Name , issue1 . Index , owner . Name , token )
req := NewRequest ( t , "DELETE" , urlStr )
session . MakeRequest ( t , req , http . StatusCreated )
testSubscription ( issue1 , false )
2020-05-01 01:55:24 +03:00
req = NewRequest ( t , "DELETE" , urlStr )
session . MakeRequest ( t , req , http . StatusOK )
testSubscription ( issue1 , false )
2021-12-10 04:27:50 +03:00
issue5Repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue5 . RepoID } ) . ( * repo_model . Repository )
2020-04-21 16:48:53 +03:00
urlStr = fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/subscriptions/%s?token=%s" , issue5Repo . OwnerName , issue5Repo . Name , issue5 . Index , owner . Name , token )
req = NewRequest ( t , "PUT" , urlStr )
session . MakeRequest ( t , req , http . StatusCreated )
testSubscription ( issue5 , true )
2020-05-01 01:55:24 +03:00
req = NewRequest ( t , "PUT" , urlStr )
session . MakeRequest ( t , req , http . StatusOK )
testSubscription ( issue5 , true )
2020-04-21 16:48:53 +03:00
}