code.gitea.io/gitea@v1.22.3/tests/integration/api_issue_stopwatch_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "net/http" 8 "testing" 9 10 auth_model "code.gitea.io/gitea/models/auth" 11 "code.gitea.io/gitea/models/db" 12 issues_model "code.gitea.io/gitea/models/issues" 13 repo_model "code.gitea.io/gitea/models/repo" 14 "code.gitea.io/gitea/models/unittest" 15 user_model "code.gitea.io/gitea/models/user" 16 api "code.gitea.io/gitea/modules/structs" 17 "code.gitea.io/gitea/tests" 18 19 "github.com/stretchr/testify/assert" 20 ) 21 22 func TestAPIListStopWatches(t *testing.T) { 23 defer tests.PrepareTestEnv(t)() 24 25 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 26 owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}) 27 28 session := loginUser(t, owner.Name) 29 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadRepository, auth_model.AccessTokenScopeReadUser) 30 req := NewRequest(t, "GET", "/api/v1/user/stopwatches"). 31 AddTokenAuth(token) 32 resp := MakeRequest(t, req, http.StatusOK) 33 var apiWatches []*api.StopWatch 34 DecodeJSON(t, resp, &apiWatches) 35 stopwatch := unittest.AssertExistsAndLoadBean(t, &issues_model.Stopwatch{UserID: owner.ID}) 36 issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: stopwatch.IssueID}) 37 if assert.Len(t, apiWatches, 1) { 38 assert.EqualValues(t, stopwatch.CreatedUnix.AsTime().Unix(), apiWatches[0].Created.Unix()) 39 assert.EqualValues(t, issue.Index, apiWatches[0].IssueIndex) 40 assert.EqualValues(t, issue.Title, apiWatches[0].IssueTitle) 41 assert.EqualValues(t, repo.Name, apiWatches[0].RepoName) 42 assert.EqualValues(t, repo.OwnerName, apiWatches[0].RepoOwnerName) 43 assert.Greater(t, apiWatches[0].Seconds, int64(0)) 44 } 45 } 46 47 func TestAPIStopStopWatches(t *testing.T) { 48 defer tests.PrepareTestEnv(t)() 49 50 issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}) 51 _ = issue.LoadRepo(db.DefaultContext) 52 owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: issue.Repo.OwnerID}) 53 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 54 55 session := loginUser(t, user.Name) 56 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue) 57 58 req := NewRequestf(t, "POST", "/api/v1/repos/%s/%s/issues/%d/stopwatch/stop", owner.Name, issue.Repo.Name, issue.Index). 59 AddTokenAuth(token) 60 MakeRequest(t, req, http.StatusCreated) 61 MakeRequest(t, req, http.StatusConflict) 62 } 63 64 func TestAPICancelStopWatches(t *testing.T) { 65 defer tests.PrepareTestEnv(t)() 66 67 issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}) 68 _ = issue.LoadRepo(db.DefaultContext) 69 owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: issue.Repo.OwnerID}) 70 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) 71 72 session := loginUser(t, user.Name) 73 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue) 74 75 req := NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/stopwatch/delete", owner.Name, issue.Repo.Name, issue.Index). 76 AddTokenAuth(token) 77 MakeRequest(t, req, http.StatusNoContent) 78 MakeRequest(t, req, http.StatusConflict) 79 } 80 81 func TestAPIStartStopWatches(t *testing.T) { 82 defer tests.PrepareTestEnv(t)() 83 84 issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 3}) 85 _ = issue.LoadRepo(db.DefaultContext) 86 owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: issue.Repo.OwnerID}) 87 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 88 89 session := loginUser(t, user.Name) 90 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue) 91 92 req := NewRequestf(t, "POST", "/api/v1/repos/%s/%s/issues/%d/stopwatch/start", owner.Name, issue.Repo.Name, issue.Index). 93 AddTokenAuth(token) 94 MakeRequest(t, req, http.StatusCreated) 95 MakeRequest(t, req, http.StatusConflict) 96 }