Skip to content

Commit fd7e38f

Browse files
6543zeripath
authored andcommitted
Add Repo Un-Star Functions (#483)
close #482 Reviewed-on: https://gitea.com/gitea/go-sdk/pulls/483 Reviewed-by: Lunny Xiao <[email protected]> Reviewed-by: Andrew Thornton <[email protected]> Co-authored-by: 6543 <[email protected]> Co-committed-by: 6543 <[email protected]>
1 parent 063d97f commit fd7e38f

File tree

2 files changed

+152
-0
lines changed

2 files changed

+152
-0
lines changed

gitea/repo_stars.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Copyright 2021 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package gitea
6+
7+
import (
8+
"fmt"
9+
"net/http"
10+
)
11+
12+
// ListStargazersOptions options for listing a repository's stargazers
13+
type ListStargazersOptions struct {
14+
ListOptions
15+
}
16+
17+
// ListRepoStargazers list a repository's stargazers
18+
func (c *Client) ListRepoStargazers(user, repo string, opt ListStargazersOptions) ([]*User, *Response, error) {
19+
opt.setDefaults()
20+
stargazers := make([]*User, 0, opt.PageSize)
21+
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/stargazers?%s", user, repo, opt.getURLQuery().Encode()), nil, nil, &stargazers)
22+
return stargazers, resp, err
23+
}
24+
25+
// GetStarredRepos returns the repos that the given user has starred
26+
func (c *Client) GetStarredRepos(user string) ([]*Repository, *Response, error) {
27+
repos := make([]*Repository, 0, 10)
28+
resp, err := c.getParsedResponse("GET", fmt.Sprintf("/users/%s/starred", user), jsonHeader, nil, &repos)
29+
return repos, resp, err
30+
}
31+
32+
// GetMyStarredRepos returns the repos that the authenticated user has starred
33+
func (c *Client) GetMyStarredRepos() ([]*Repository, *Response, error) {
34+
repos := make([]*Repository, 0, 10)
35+
resp, err := c.getParsedResponse("GET", "/user/starred", jsonHeader, nil, &repos)
36+
return repos, resp, err
37+
}
38+
39+
// IsRepoStarring returns whether the authenticated user has starred the repo or not
40+
func (c *Client) IsRepoStarring(user, repo string) (bool, *Response, error) {
41+
_, resp, err := c.getResponse("GET", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil)
42+
if resp != nil {
43+
switch resp.StatusCode {
44+
case http.StatusNotFound:
45+
return false, resp, nil
46+
case http.StatusNoContent:
47+
return true, resp, nil
48+
default:
49+
return false, resp, fmt.Errorf("unexpected status code '%d'", resp.StatusCode)
50+
}
51+
}
52+
return false, nil, err
53+
}
54+
55+
// StarRepo star specified repo as the authenticated user
56+
func (c *Client) StarRepo(user, repo string) (*Response, error) {
57+
_, resp, err := c.getResponse("PUT", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil)
58+
if resp != nil {
59+
switch resp.StatusCode {
60+
case http.StatusNoContent:
61+
return resp, nil
62+
default:
63+
return resp, fmt.Errorf("unexpected status code '%d'", resp.StatusCode)
64+
}
65+
}
66+
return nil, err
67+
}
68+
69+
// UnStarRepo remove star to specified repo as the authenticated user
70+
func (c *Client) UnStarRepo(user, repo string) (*Response, error) {
71+
_, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil)
72+
if resp != nil {
73+
switch resp.StatusCode {
74+
case http.StatusNoContent:
75+
return resp, nil
76+
default:
77+
return resp, fmt.Errorf("unexpected status code '%d'", resp.StatusCode)
78+
}
79+
}
80+
return nil, err
81+
}

gitea/repo_stars_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright 2021 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package gitea
6+
7+
import (
8+
"github.com/stretchr/testify/assert"
9+
"log"
10+
"testing"
11+
)
12+
13+
func TestRepoStaring(t *testing.T) {
14+
log.Println("== TestRepoStaring ==")
15+
16+
// init user2
17+
c := newTestClient()
18+
19+
user1, _, err := c.GetMyUserInfo()
20+
assert.NoError(t, err)
21+
22+
userA := createTestUser(t, "stargazer_a", c)
23+
userB := createTestUser(t, "stargazer_b", c)
24+
25+
repo, _ := createTestRepo(t, "toStar", c)
26+
if repo == nil {
27+
t.Skip()
28+
}
29+
30+
is, _, err := c.IsRepoStarring(repo.Owner.UserName, repo.Name)
31+
assert.NoError(t, err)
32+
assert.False(t, is)
33+
34+
repos, _, err := c.GetMyStarredRepos()
35+
assert.NoError(t, err)
36+
assert.Len(t, repos, 0)
37+
38+
_, err = c.StarRepo(repo.Owner.UserName, repo.Name)
39+
assert.NoError(t, err)
40+
c.SetSudo(userA.UserName)
41+
_, err = c.StarRepo(repo.Owner.UserName, repo.Name)
42+
assert.NoError(t, err)
43+
c.SetSudo(userB.UserName)
44+
_, err = c.StarRepo(repo.Owner.UserName, repo.Name)
45+
assert.NoError(t, err)
46+
47+
users, _, err := c.ListRepoStargazers(repo.Owner.UserName, repo.Name, ListStargazersOptions{})
48+
assert.NoError(t, err)
49+
assert.Len(t, users, 3)
50+
assert.EqualValues(t, user1.UserName, users[0].UserName)
51+
52+
_, err = c.UnStarRepo(repo.Owner.UserName, repo.Name)
53+
assert.NoError(t, err)
54+
_, err = c.UnStarRepo(repo.Owner.UserName, repo.Name)
55+
assert.NoError(t, err)
56+
57+
c.SetSudo("")
58+
59+
users, _, err = c.ListRepoStargazers(repo.Owner.UserName, repo.Name, ListStargazersOptions{})
60+
assert.NoError(t, err)
61+
assert.Len(t, users, 2)
62+
63+
repos, _, err = c.GetMyStarredRepos()
64+
assert.NoError(t, err)
65+
assert.Len(t, repos, 1)
66+
67+
reposNew, _, err := c.GetStarredRepos(user1.UserName)
68+
assert.NoError(t, err)
69+
assert.Len(t, repos, 1)
70+
assert.EqualValues(t, repos, reposNew)
71+
}

0 commit comments

Comments
 (0)