2020-04-21 15:48:53 +02:00
// Copyright 2020 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2020-04-21 15:48:53 +02:00
2022-09-02 15:18:23 -04:00
package integration
2020-04-21 15:48:53 +02:00
import (
"fmt"
"net/http"
"testing"
2022-06-13 17:37:59 +08:00
issues_model "code.gitea.io/gitea/models/issues"
2021-12-10 09:27:50 +08:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-16 16:53:21 +08:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 17:49:20 +08:00
user_model "code.gitea.io/gitea/models/user"
2020-04-21 15:48:53 +02:00
api "code.gitea.io/gitea/modules/structs"
2022-09-02 15:18:23 -04:00
"code.gitea.io/gitea/tests"
2020-04-21 15:48:53 +02:00
"github.com/stretchr/testify/assert"
)
func TestAPIIssueSubscriptions ( t * testing . T ) {
2022-09-02 15:18:23 -04:00
defer tests . PrepareTestEnv ( t ) ( )
2020-04-21 15:48:53 +02:00
2022-08-16 10:22:25 +08:00
issue1 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 1 } )
issue2 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 2 } )
issue3 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 3 } )
issue4 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 4 } )
issue5 := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 8 } )
2020-04-21 15:48:53 +02:00
2022-08-16 10:22:25 +08:00
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : issue1 . PosterID } )
2020-04-21 15:48:53 +02:00
session := loginUser ( t , owner . Name )
token := getTokenForLoggedInUser ( t , session )
2022-06-13 17:37:59 +08:00
testSubscription := func ( issue * issues_model . Issue , isWatching bool ) {
2022-08-16 10:22:25 +08:00
issueRepo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } )
2020-04-21 15:48:53 +02: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 )
2022-08-16 10:22:25 +08:00
issue1Repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue1 . RepoID } )
2020-04-21 15:48:53 +02: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 00:55:24 +02:00
req = NewRequest ( t , "DELETE" , urlStr )
session . MakeRequest ( t , req , http . StatusOK )
testSubscription ( issue1 , false )
2022-08-16 10:22:25 +08:00
issue5Repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue5 . RepoID } )
2020-04-21 15:48:53 +02: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 00:55:24 +02:00
req = NewRequest ( t , "PUT" , urlStr )
session . MakeRequest ( t , req , http . StatusOK )
testSubscription ( issue5 , true )
2020-04-21 15:48:53 +02:00
}