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  }