Add Repo Un-Star Functions #483
Merged
zeripath
merged 2 commits from 6543/go-sdk:add-repo-star-funcs
into master
1 year ago
2 changed files with 152 additions and 0 deletions
@ -0,0 +1,81 @@ |
||||
// Copyright 2021 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 gitea |
||||
|
||||
import ( |
||||
"fmt" |
||||
"net/http" |
||||
) |
||||
|
||||
// ListStargazersOptions options for listing a repository's stargazers
|
||||
type ListStargazersOptions struct { |
||||
ListOptions |
||||
} |
||||
|
||||
// ListRepoStargazers list a repository's stargazers
|
||||
func (c *Client) ListRepoStargazers(user, repo string, opt ListStargazersOptions) ([]*User, *Response, error) { |
||||
opt.setDefaults() |
||||
stargazers := make([]*User, 0, opt.PageSize) |
||||
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/stargazers?%s", user, repo, opt.getURLQuery().Encode()), nil, nil, &stargazers) |
||||
return stargazers, resp, err |
||||
} |
||||
|
||||
// GetStarredRepos returns the repos that the given user has starred
|
||||
func (c *Client) GetStarredRepos(user string) ([]*Repository, *Response, error) { |
||||
repos := make([]*Repository, 0, 10) |
||||
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/users/%s/starred", user), jsonHeader, nil, &repos) |
||||
return repos, resp, err |
||||
} |
||||
|
||||
// GetMyStarredRepos returns the repos that the authenticated user has starred
|
||||
func (c *Client) GetMyStarredRepos() ([]*Repository, *Response, error) { |
||||
repos := make([]*Repository, 0, 10) |
||||
resp, err := c.getParsedResponse("GET", "/user/starred", jsonHeader, nil, &repos) |
||||
return repos, resp, err |
||||
} |
||||
|
||||
// IsRepoStarring returns whether the authenticated user has starred the repo or not
|
||||
func (c *Client) IsRepoStarring(user, repo string) (bool, *Response, error) { |
||||
_, resp, err := c.getResponse("GET", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) |
||||
if resp != nil { |
||||
switch resp.StatusCode { |
||||
case http.StatusNotFound: |
||||
return false, resp, nil |
||||
case http.StatusNoContent: |
||||
return true, resp, nil |
||||
default: |
||||
return false, resp, fmt.Errorf("unexpected status code '%d'", resp.StatusCode) |
||||
} |
||||
} |
||||
return false, nil, err |
||||
} |
||||
|
||||
// StarRepo star specified repo as the authenticated user
|
||||
func (c *Client) StarRepo(user, repo string) (*Response, error) { |
||||
_, resp, err := c.getResponse("PUT", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) |
||||
if resp != nil { |
||||
switch resp.StatusCode { |
||||
case http.StatusNoContent: |
||||
return resp, nil |
||||
default: |
||||
return resp, fmt.Errorf("unexpected status code '%d'", resp.StatusCode) |
||||
} |
||||
} |
||||
return nil, err |
||||
} |
||||
|
||||
// UnStarRepo remove star to specified repo as the authenticated user
|
||||
func (c *Client) UnStarRepo(user, repo string) (*Response, error) { |
||||
_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) |
||||
if resp != nil { |
||||
switch resp.StatusCode { |
||||
case http.StatusNoContent: |
||||
return resp, nil |
||||
default: |
||||
return resp, fmt.Errorf("unexpected status code '%d'", resp.StatusCode) |
||||
} |
||||
} |
||||
return nil, err |
||||
} |
@ -0,0 +1,71 @@ |
||||
// Copyright 2021 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 gitea |
||||
|
||||
import ( |
||||
"github.com/stretchr/testify/assert" |
||||
"log" |
||||
"testing" |
||||
) |
||||
|
||||
func TestRepoStaring(t *testing.T) { |
||||
log.Println("== TestRepoStaring ==") |
||||
|
||||
// init user2
|
||||
c := newTestClient() |
||||
|
||||
user1, _, err := c.GetMyUserInfo() |
||||
assert.NoError(t, err) |
||||
|
||||
userA := createTestUser(t, "stargazer_a", c) |
||||
userB := createTestUser(t, "stargazer_b", c) |
||||
|
||||
repo, _ := createTestRepo(t, "toStar", c) |
||||
if repo == nil { |
||||
t.Skip() |
||||
} |
||||
|
||||
is, _, err := c.IsRepoStarring(repo.Owner.UserName, repo.Name) |
||||
assert.NoError(t, err) |
||||
assert.False(t, is) |
||||
|
||||
repos, _, err := c.GetMyStarredRepos() |
||||
assert.NoError(t, err) |
||||
assert.Len(t, repos, 0) |
||||
|
||||
_, err = c.StarRepo(repo.Owner.UserName, repo.Name) |
||||
assert.NoError(t, err) |
||||
c.SetSudo(userA.UserName) |
||||
_, err = c.StarRepo(repo.Owner.UserName, repo.Name) |
||||
assert.NoError(t, err) |
||||
c.SetSudo(userB.UserName) |
||||
_, err = c.StarRepo(repo.Owner.UserName, repo.Name) |
||||
assert.NoError(t, err) |
||||
|
||||
users, _, err := c.ListRepoStargazers(repo.Owner.UserName, repo.Name, ListStargazersOptions{}) |
||||
assert.NoError(t, err) |
||||
assert.Len(t, users, 3) |
||||
assert.EqualValues(t, user1.UserName, users[0].UserName) |
||||
|
||||
_, err = c.UnStarRepo(repo.Owner.UserName, repo.Name) |
||||
assert.NoError(t, err) |
||||
_, err = c.UnStarRepo(repo.Owner.UserName, repo.Name) |
||||
assert.NoError(t, err) |
||||
|
||||
c.SetSudo("") |
||||
|
||||
users, _, err = c.ListRepoStargazers(repo.Owner.UserName, repo.Name, ListStargazersOptions{}) |
||||
assert.NoError(t, err) |
||||
assert.Len(t, users, 2) |
||||
|
||||
repos, _, err = c.GetMyStarredRepos() |
||||
assert.NoError(t, err) |
||||
assert.Len(t, repos, 1) |
||||
|
||||
reposNew, _, err := c.GetStarredRepos(user1.UserName) |
||||
assert.NoError(t, err) |
||||
assert.Len(t, repos, 1) |
||||
assert.EqualValues(t, repos, reposNew) |
||||
} |
Loading…
Reference in new issue