Add some api integration tests (#18872)

depends on #18871

Added some api integration tests to help testing of #18798.

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: zeripath <art27@cantab.net>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
tokarchuk/v1.18
KN4CK3R 2 years ago committed by GitHub
parent 18622a0705
commit a577214760
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 36
      models/fixtures/attachment.yml
  2. 85
      models/fixtures/issue.yml
  3. 5
      models/fixtures/label.yml
  4. 9
      models/fixtures/milestone.yml
  5. 1019
      models/fixtures/repository.yml
  6. 15
      models/fixtures/team.yml
  7. 12
      models/fixtures/topic.yml
  8. 924
      models/fixtures/user.yml
  9. 5
      models/fixtures/webauthn_credential.yml
  10. 2
      models/user/user_test.go
  11. 2
      routers/web/user/home_test.go
  12. 44
      tests/integration/api_admin_test.go
  13. 38
      tests/integration/api_feed_user_test.go
  14. 111
      tests/integration/api_user_follow_test.go
  15. 51
      tests/integration/api_user_info_test.go
  16. 78
      tests/integration/api_user_star_test.go
  17. 78
      tests/integration/api_user_watch_test.go

@ -3,9 +3,12 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
repo_id: 1
issue_id: 1
release_id: 0
uploader_id: 0
comment_id: 0
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
@ -13,9 +16,12 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a12
repo_id: 2
issue_id: 4
release_id: 0
uploader_id: 0
comment_id: 0
name: attach2
download_count: 1
size: 0
created_unix: 946684800
-
@ -23,9 +29,12 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a13
repo_id: 1
issue_id: 2
release_id: 0
uploader_id: 0
comment_id: 1
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
@ -33,9 +42,12 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14
repo_id: 1
issue_id: 3
release_id: 0
uploader_id: 0
comment_id: 1
name: attach2
download_count: 1
size: 0
created_unix: 946684800
-
@ -43,9 +55,12 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a15
repo_id: 2
issue_id: 4
release_id: 0
uploader_id: 0
comment_id: 0
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
@ -53,9 +68,12 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a16
repo_id: 1
issue_id: 5
release_id: 0
uploader_id: 0
comment_id: 2
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
@ -63,9 +81,12 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a17
repo_id: 1
issue_id: 5
release_id: 0
uploader_id: 0
comment_id: 2
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
@ -73,34 +94,49 @@
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a18
repo_id: 3
issue_id: 6
release_id: 0
uploader_id: 0
comment_id: 0
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
id: 9
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a19
repo_id: 1
issue_id: 0
release_id: 1
uploader_id: 0
comment_id: 0
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
id: 10
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a20
repo_id: 0 # TestGetAttachment/NotLinked
issue_id: 0
release_id: 0
uploader_id: 8
comment_id: 0
name: attach1
download_count: 0
size: 0
created_unix: 946684800
-
id: 11
uuid: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a21
repo_id: 40
issue_id: 0
release_id: 2
uploader_id: 0
comment_id: 0
name: attach1
download_count: 0
size: 0
created_unix: 946684800

@ -3,208 +3,287 @@
repo_id: 1
index: 1
poster_id: 1
original_author_id: 0
name: issue1
content: content for the first issue
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 2
created_unix: 946684800
updated_unix: 978307200
is_locked: false
-
id: 2
repo_id: 1
index: 2
poster_id: 1
original_author_id: 0
name: issue2
content: content for the second issue
milestone_id: 1
priority: 0
is_closed: false
is_pull: true
num_comments: 0
created_unix: 946684810
updated_unix: 978307190
is_locked: false
-
id: 3
repo_id: 1
index: 3
poster_id: 1
original_author_id: 0
name: issue3
content: content for the third issue
milestone_id: 3
priority: 0
is_closed: false
is_pull: true
num_comments: 0
created_unix: 946684820
updated_unix: 978307180
is_locked: false
-
id: 4
repo_id: 2
index: 1
poster_id: 2
original_author_id: 0
name: issue4
content: content for the fourth issue
milestone_id: 0
priority: 0
is_closed: true
is_pull: false
num_comments: 0
created_unix: 946684830
updated_unix: 978307200
is_locked: false
-
id: 5
repo_id: 1
index: 4
poster_id: 2
original_author_id: 0
name: issue5
content: content for the fifth issue
milestone_id: 0
priority: 0
is_closed: true
is_pull: false
num_comments: 0
created_unix: 946684840
updated_unix: 978307200
is_locked: false
-
id: 6
repo_id: 3
index: 1
poster_id: 1
original_author_id: 0
name: issue6
content: content6
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
created_unix: 946684850
updated_unix: 978307200
is_locked: false
-
id: 7
repo_id: 2
index: 2
poster_id: 2
original_author_id: 0
name: issue7
content: content for the seventh issue
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
created_unix: 946684830
updated_unix: 978307200
is_locked: false
-
id: 8
repo_id: 10
index: 1
poster_id: 11
original_author_id: 0
name: pr2
content: a pull request
milestone_id: 0
priority: 0
is_closed: false
is_pull: true
num_comments: 0
created_unix: 946684820
updated_unix: 978307180
is_locked: false
-
id: 9
repo_id: 48
index: 1
poster_id: 11
original_author_id: 0
name: pr1
content: a pull request
milestone_id: 0
priority: 0
is_closed: false
is_pull: true
num_comments: 0
created_unix: 946684820
updated_unix: 978307180
is_locked: false
-
id: 10
repo_id: 42
index: 1
poster_id: 500
original_author_id: 0
name: issue from deleted account
content: content from deleted account
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
deadline_unix: 1019307200
created_unix: 946684830
updated_unix: 999307200
deadline_unix: 1019307200
is_locked: false
-
id: 11
repo_id: 1
index: 5
poster_id: 1
original_author_id: 0
name: pull5
content: content for the a pull request
milestone_id: 0
priority: 0
is_closed: false
is_pull: true
num_comments: 0
created_unix: 1579194806
updated_unix: 1579194806
is_locked: false
-
id: 12
repo_id: 3
index: 2
poster_id: 2
original_author_id: 0
name: pull6
content: content for the a pull request
milestone_id: 0
priority: 0
is_closed: false
is_pull: true
num_comments: 0
created_unix: 1602935696
updated_unix: 1602935696
is_locked: false
-
id: 13
repo_id: 50
index: 1
poster_id: 2
original_author_id: 0
name: issue in active repo
content: we'll be testing github issue 13171 with this.
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
created_unix: 1602935696
updated_unix: 1602935696
is_locked: false
-
id: 14
repo_id: 51
index: 1
poster_id: 2
original_author_id: 0
name: issue in archived repo
content: we'll be testing github issue 13171 with this.
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
created_unix: 1602935696
updated_unix: 1602935696
is_locked: false
-
id: 15
repo_id: 5
index: 1
poster_id: 2
original_author_id: 0
name: issue in repo not linked to team1
content: content
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
created_unix: 1602935696
updated_unix: 1602935696
is_locked: false
-
id: 16
repo_id: 32
index: 1
poster_id: 2
original_author_id: 0
name: just a normal issue
content: content
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
created_unix: 1602935696
updated_unix: 1602935696
is_locked: false
-
id: 17
repo_id: 32
index: 2
poster_id: 15
original_author_id: 0
name: a issue with a assignment
content: content
milestone_id: 0
priority: 0
is_closed: false
is_pull: false
num_comments: 0
created_unix: 1602935696
updated_unix: 1602935696
is_locked: false

@ -15,10 +15,11 @@
color: '#000000'
num_issues: 1
num_closed_issues: 1
-
id: 3
repo_id: 0
org_id: 3
org_id: 3
name: orglabel3
color: '#abcdef'
num_issues: 0
@ -32,7 +33,7 @@
color: '#000000'
num_issues: 1
num_closed_issues: 0
-
id: 5
repo_id: 10

@ -6,6 +6,7 @@
is_closed: false
num_issues: 1
num_closed_issues: 0
completeness: 0
deadline_unix: 253370764800
-
@ -16,6 +17,7 @@
is_closed: false
num_issues: 0
num_closed_issues: 0
completeness: 0
deadline_unix: 253370764800
-
@ -26,6 +28,7 @@
is_closed: true
num_issues: 1
num_closed_issues: 0
completeness: 0
deadline_unix: 253370764800
-
@ -36,14 +39,16 @@
is_closed: false
num_issues: 0
num_closed_issues: 0
completeness: 0
deadline_unix: 253370764800
-
-
id: 5
repo_id: 10
name: milestone of repo 10
name: milestone of repo 10
content: for testing with PRs
is_closed: false
num_issues: 0
num_closed_issues: 0
completeness: 0
deadline_unix: 253370764800

File diff suppressed because it is too large Load Diff

@ -6,6 +6,7 @@
authorize: 4 # owner
num_repos: 3
num_members: 1
includes_all_repositories: false
can_create_org_repo: true
-
@ -16,6 +17,7 @@
authorize: 2 # write
num_repos: 1
num_members: 2
includes_all_repositories: false
can_create_org_repo: false
-
@ -26,6 +28,7 @@
authorize: 4 # owner
num_repos: 0
num_members: 1
includes_all_repositories: false
can_create_org_repo: true
-
@ -36,6 +39,7 @@
authorize: 4 # owner
num_repos: 0
num_members: 1
includes_all_repositories: false
can_create_org_repo: true
-
@ -46,6 +50,7 @@
authorize: 4 # owner
num_repos: 2
num_members: 2
includes_all_repositories: false
can_create_org_repo: true
-
@ -56,6 +61,7 @@
authorize: 4 # owner
num_repos: 2
num_members: 2
includes_all_repositories: false
can_create_org_repo: true
-
@ -66,6 +72,7 @@
authorize: 2 # write
num_repos: 1
num_members: 1
includes_all_repositories: false
can_create_org_repo: false
-
@ -76,6 +83,7 @@
authorize: 2 # write
num_repos: 1
num_members: 1
includes_all_repositories: false
can_create_org_repo: false
-
@ -86,6 +94,7 @@
authorize: 1 # read
num_repos: 1
num_members: 2
includes_all_repositories: false
can_create_org_repo: false
-
@ -93,9 +102,10 @@
org_id: 25
lower_name: notowners
name: NotOwners
authorize: 1 # owner
authorize: 1 # read
num_repos: 0
num_members: 1
includes_all_repositories: false
can_create_org_repo: false
-
@ -106,6 +116,7 @@
authorize: 1 # read
num_repos: 0
num_members: 0
includes_all_repositories: false
can_create_org_repo: false
-
@ -116,6 +127,7 @@
authorize: 3 # admin
num_repos: 0
num_members: 1
includes_all_repositories: false
can_create_org_repo: true
-
@ -126,4 +138,5 @@
authorize: 3 # admin
num_repos: 0
num_members: 1
includes_all_repositories: false
can_create_org_repo: false

@ -8,18 +8,22 @@
name: database
repo_count: 1
- id: 3
-
id: 3
name: SQL
repo_count: 1
- id: 4
-
id: 4
name: graphql
repo_count: 1
- id: 5
-
id: 5
name: topicname1
repo_count: 1
- id: 6
-
id: 6
name: topicname2
repo_count: 2

File diff suppressed because it is too large Load Diff

@ -1,5 +1,6 @@
- id: 1
name: "WebAuthn credential"
-
id: 1
name: WebAuthn credential
user_id: 32
attestation_type: none
sign_count: 0

@ -102,7 +102,7 @@ func TestSearchUsers(t *testing.T) {
[]int64{9})
testUserSuccess(&user_model.SearchUserOptions{OrderBy: "id ASC", ListOptions: db.ListOptions{Page: 1}, IsActive: util.OptionalBoolTrue},
[]int64{1, 2, 4, 5, 8, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 24, 28, 29, 30, 32})
[]int64{1, 2, 4, 5, 8, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 24, 27, 28, 29, 30, 32})
testUserSuccess(&user_model.SearchUserOptions{Keyword: "user1", OrderBy: "id ASC", ListOptions: db.ListOptions{Page: 1}, IsActive: util.OptionalBoolTrue},
[]int64{1, 10, 11, 12, 13, 14, 15, 16, 18})

@ -76,7 +76,7 @@ func TestPulls(t *testing.T) {
Pulls(ctx)
assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
assert.Len(t, ctx.Data["Issues"], 3)
assert.Len(t, ctx.Data["Issues"], 4)
}
func TestMilestones(t *testing.T) {

@ -167,6 +167,33 @@ func TestAPICreateUserInvalidEmail(t *testing.T) {
session.MakeRequest(t, req, http.StatusUnprocessableEntity)
}
func TestAPICreateAndDeleteUser(t *testing.T) {
defer tests.PrepareTestEnv(t)()
adminUsername := "user1"
session := loginUser(t, adminUsername)
token := getTokenForLoggedInUser(t, session)
req := NewRequestWithValues(
t,
"POST",
fmt.Sprintf("/api/v1/admin/users?token=%s", token),
map[string]string{
"email": "deleteme@domain.com",
"full_name": "delete me",
"login_name": "deleteme",
"must_change_password": "true",
"password": "password",
"send_notify": "true",
"source_id": "0",
"username": "deleteme",
},
)
MakeRequest(t, req, http.StatusCreated)
req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/admin/users/deleteme?token=%s", token))
MakeRequest(t, req, http.StatusNoContent)
}
func TestAPIEditUser(t *testing.T) {
defer tests.PrepareTestEnv(t)()
adminUsername := "user1"
@ -209,3 +236,20 @@ func TestAPIEditUser(t *testing.T) {
user2 = unittest.AssertExistsAndLoadBean(t, &user_model.User{LoginName: "user2"})
assert.True(t, user2.IsRestricted)
}
func TestAPICreateRepoForUser(t *testing.T) {
defer tests.PrepareTestEnv(t)()
adminUsername := "user1"
session := loginUser(t, adminUsername)
token := getTokenForLoggedInUser(t, session)
req := NewRequestWithJSON(
t,
"POST",
fmt.Sprintf("/api/v1/admin/users/%s/repos?token=%s", adminUsername, token),
&api.CreateRepoOption{
Name: "admincreatedrepo",
},
)
MakeRequest(t, req, http.StatusCreated)
}

@ -0,0 +1,38 @@
// Copyright 2022 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 integration
import (
"net/http"
"testing"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestFeed(t *testing.T) {
t.Run("User", func(t *testing.T) {
t.Run("Atom", func(t *testing.T) {
defer tests.PrepareTestEnv(t)()
req := NewRequest(t, "GET", "/user2.atom")
resp := MakeRequest(t, req, http.StatusOK)
data := resp.Body.String()
assert.Contains(t, data, `<feed xmlns="http://www.w3.org/2005/Atom"`)
})
t.Run("RSS", func(t *testing.T) {
defer tests.PrepareTestEnv(t)()
req := NewRequest(t, "GET", "/user2.rss")
resp := MakeRequest(t, req, http.StatusOK)
data := resp.Body.String()
assert.Contains(t, data, `<rss version="2.0"`)
})
})
}

@ -0,0 +1,111 @@
// Copyright 2022 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 integration
import (
"fmt"
"net/http"
"testing"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestAPIFollow(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user1 := "user4"
user2 := "user1"
session1 := loginUser(t, user1)
token1 := getTokenForLoggedInUser(t, session1)
session2 := loginUser(t, user2)
token2 := getTokenForLoggedInUser(t, session2)
t.Run("Follow", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "PUT", fmt.Sprintf("/api/v1/user/following/%s?token=%s", user1, token2))
MakeRequest(t, req, http.StatusNoContent)
})
t.Run("ListFollowing", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/following?token=%s", user2, token2))
resp := MakeRequest(t, req, http.StatusOK)
var users []api.User
DecodeJSON(t, resp, &users)
assert.Len(t, users, 1)
assert.Equal(t, user1, users[0].UserName)
})
t.Run("ListMyFollowing", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/following?token=%s", token2))
resp := MakeRequest(t, req, http.StatusOK)
var users []api.User
DecodeJSON(t, resp, &users)
assert.Len(t, users, 1)
assert.Equal(t, user1, users[0].UserName)
})
t.Run("ListFollowers", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/followers?token=%s", user1, token1))
resp := MakeRequest(t, req, http.StatusOK)
var users []api.User
DecodeJSON(t, resp, &users)
assert.Len(t, users, 1)
assert.Equal(t, user2, users[0].UserName)
})
t.Run("ListMyFollowers", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/followers?token=%s", token1))
resp := MakeRequest(t, req, http.StatusOK)
var users []api.User
DecodeJSON(t, resp, &users)
assert.Len(t, users, 1)
assert.Equal(t, user2, users[0].UserName)
})
t.Run("CheckFollowing", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/following/%s?token=%s", user2, user1, token2))
MakeRequest(t, req, http.StatusNoContent)
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/following/%s?token=%s", user1, user2, token2))
MakeRequest(t, req, http.StatusNotFound)
})
t.Run("CheckMyFollowing", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/following/%s?token=%s", user1, token2))
MakeRequest(t, req, http.StatusNoContent)
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/following/%s?token=%s", user2, token1))
MakeRequest(t, req, http.StatusNotFound)
})
t.Run("Unfollow", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/user/following/%s?token=%s", user1, token2))
MakeRequest(t, req, http.StatusNoContent)
})
}

@ -0,0 +1,51 @@
// Copyright 2022 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 integration
import (
"fmt"
"net/http"
"testing"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestAPIUserInfo(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := "user1"
user2 := "user31"
session := loginUser(t, user)
token := getTokenForLoggedInUser(t, session)
t.Run("GetInfo", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s?token=%s", user2, token))
resp := MakeRequest(t, req, http.StatusOK)
var u api.User
DecodeJSON(t, resp, &u)
assert.Equal(t, user2, u.UserName)
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s", user2))
MakeRequest(t, req, http.StatusNotFound)
})
t.Run("GetAuthenticatedUser", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user?token=%s", token))
resp := MakeRequest(t, req, http.StatusOK)
var u api.User
DecodeJSON(t, resp, &u)
assert.Equal(t, user, u.UserName)
})
}

@ -0,0 +1,78 @@
// Copyright 2022 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 integration
import (
"fmt"
"net/http"
"testing"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestAPIStar(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := "user1"
repo := "user2/repo1"
session := loginUser(t, user)
token := getTokenForLoggedInUser(t, session)
t.Run("Star", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "PUT", fmt.Sprintf("/api/v1/user/starred/%s?token=%s", repo, token))
MakeRequest(t, req, http.StatusNoContent)
})
t.Run("GetStarredRepos", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/starred?token=%s", user, token))
resp := MakeRequest(t, req, http.StatusOK)
assert.Equal(t, "1", resp.Header().Get("X-Total-Count"))
var repos []api.Repository
DecodeJSON(t, resp, &repos)
assert.Len(t, repos, 1)
assert.Equal(t, repo, repos[0].FullName)
})
t.Run("GetMyStarredRepos", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/starred?token=%s", token))
resp := MakeRequest(t, req, http.StatusOK)
assert.Equal(t, "1", resp.Header().Get("X-Total-Count"))
var repos []api.Repository
DecodeJSON(t, resp, &repos)
assert.Len(t, repos, 1)
assert.Equal(t, repo, repos[0].FullName)
})
t.Run("IsStarring", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/starred/%s?token=%s", repo, token))
MakeRequest(t, req, http.StatusNoContent)
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/starred/%s?token=%s", repo+"notexisting", token))
MakeRequest(t, req, http.StatusNotFound)
})
t.Run("Unstar", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/user/starred/%s?token=%s", repo, token))
MakeRequest(t, req, http.StatusNoContent)
})
}

@ -0,0 +1,78 @@
// Copyright 2022 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 integration
import (
"fmt"
"net/http"
"testing"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestAPIWatch(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := "user1"
repo := "user2/repo1"
session := loginUser(t, user)
token := getTokenForLoggedInUser(t, session)
t.Run("Watch", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "PUT", fmt.Sprintf("/api/v1/repos/%s/subscription?token=%s", repo, token))
MakeRequest(t, req, http.StatusOK)
})
t.Run("GetWatchedRepos", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/subscriptions?token=%s", user, token))
resp := MakeRequest(t, req, http.StatusOK)
assert.Equal(t, "1", resp.Header().Get("X-Total-Count"))
var repos []api.Repository
DecodeJSON(t, resp, &repos)
assert.Len(t, repos, 1)
assert.Equal(t, repo, repos[0].FullName)
})
t.Run("GetMyWatchedRepos", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/user/subscriptions?token=%s", token))
resp := MakeRequest(t, req, http.StatusOK)
assert.Equal(t, "1", resp.Header().Get("X-Total-Count"))
var repos []api.Repository
DecodeJSON(t, resp, &repos)
assert.Len(t, repos, 1)
assert.Equal(t, repo, repos[0].FullName)
})
t.Run("IsWatching", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/subscription?token=%s", repo, token))
MakeRequest(t, req, http.StatusOK)
req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/subscription?token=%s", repo+"notexisting", token))
MakeRequest(t, req, http.StatusNotFound)
})
t.Run("Unwatch", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/subscription?token=%s", repo, token))
MakeRequest(t, req, http.StatusNoContent)
})
}
Loading…
Cancel
Save