code.gitea.io/gitea@v1.22.3/tests/integration/api_issue_subscription_test.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "fmt" 8 "net/http" 9 "testing" 10 11 auth_model "code.gitea.io/gitea/models/auth" 12 "code.gitea.io/gitea/models/db" 13 issues_model "code.gitea.io/gitea/models/issues" 14 repo_model "code.gitea.io/gitea/models/repo" 15 "code.gitea.io/gitea/models/unittest" 16 user_model "code.gitea.io/gitea/models/user" 17 api "code.gitea.io/gitea/modules/structs" 18 "code.gitea.io/gitea/tests" 19 20 "github.com/stretchr/testify/assert" 21 ) 22 23 func TestAPIIssueSubscriptions(t *testing.T) { 24 defer tests.PrepareTestEnv(t)() 25 26 issue1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}) 27 issue2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}) 28 issue3 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 3}) 29 issue4 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 4}) 30 issue5 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 8}) 31 32 owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: issue1.PosterID}) 33 34 session := loginUser(t, owner.Name) 35 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue) 36 37 testSubscription := func(issue *issues_model.Issue, isWatching bool) { 38 issueRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issue.RepoID}) 39 40 req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/subscriptions/check", issueRepo.OwnerName, issueRepo.Name, issue.Index)). 41 AddTokenAuth(token) 42 resp := MakeRequest(t, req, http.StatusOK) 43 wi := new(api.WatchInfo) 44 DecodeJSON(t, resp, wi) 45 46 assert.EqualValues(t, isWatching, wi.Subscribed) 47 assert.EqualValues(t, !isWatching, wi.Ignored) 48 assert.EqualValues(t, issue.APIURL(db.DefaultContext)+"/subscriptions", wi.URL) 49 assert.EqualValues(t, issue.CreatedUnix, wi.CreatedAt.Unix()) 50 assert.EqualValues(t, issueRepo.APIURL(), wi.RepositoryURL) 51 } 52 53 testSubscription(issue1, true) 54 testSubscription(issue2, true) 55 testSubscription(issue3, true) 56 testSubscription(issue4, false) 57 testSubscription(issue5, false) 58 59 issue1Repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issue1.RepoID}) 60 urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/subscriptions/%s", issue1Repo.OwnerName, issue1Repo.Name, issue1.Index, owner.Name) 61 req := NewRequest(t, "DELETE", urlStr). 62 AddTokenAuth(token) 63 MakeRequest(t, req, http.StatusCreated) 64 testSubscription(issue1, false) 65 66 req = NewRequest(t, "DELETE", urlStr). 67 AddTokenAuth(token) 68 MakeRequest(t, req, http.StatusOK) 69 testSubscription(issue1, false) 70 71 issue5Repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issue5.RepoID}) 72 urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/subscriptions/%s", issue5Repo.OwnerName, issue5Repo.Name, issue5.Index, owner.Name) 73 req = NewRequest(t, "PUT", urlStr). 74 AddTokenAuth(token) 75 MakeRequest(t, req, http.StatusCreated) 76 testSubscription(issue5, true) 77 78 req = NewRequest(t, "PUT", urlStr). 79 AddTokenAuth(token) 80 MakeRequest(t, req, http.StatusOK) 81 testSubscription(issue5, true) 82 }