add support for api /repos/{owner}/{repo}/collaborators/{collaborator}/permission (#611)
Co-authored-by: Dmitry Afanasiev <afanasiev.dmitry@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Reviewed-on: https://gitea.com/gitea/go-sdk/pulls/611 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Dmitry Afanasiev <dafanasiev@noreply.gitea.io> Co-committed-by: Dmitry Afanasiev <dafanasiev@noreply.gitea.io>
This commit is contained in:
parent
df1269f18d
commit
846d53e967
2 changed files with 44 additions and 0 deletions
|
@ -16,6 +16,13 @@ type ListCollaboratorsOptions struct {
|
||||||
ListOptions
|
ListOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CollaboratorPermissionResult result type for CollaboratorPermission
|
||||||
|
type CollaboratorPermissionResult struct {
|
||||||
|
Permission AccessMode `json:"permission"`
|
||||||
|
Role string `json:"role_name"`
|
||||||
|
User *User `json:"user"`
|
||||||
|
}
|
||||||
|
|
||||||
// ListCollaborators list a repository's collaborators
|
// ListCollaborators list a repository's collaborators
|
||||||
func (c *Client) ListCollaborators(user, repo string, opt ListCollaboratorsOptions) ([]*User, *Response, error) {
|
func (c *Client) ListCollaborators(user, repo string, opt ListCollaboratorsOptions) ([]*User, *Response, error) {
|
||||||
if err := escapeValidatePathSegments(&user, &repo); err != nil {
|
if err := escapeValidatePathSegments(&user, &repo); err != nil {
|
||||||
|
@ -44,6 +51,26 @@ func (c *Client) IsCollaborator(user, repo, collaborator string) (bool, *Respons
|
||||||
return false, resp, nil
|
return false, resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CollaboratorPermission gets collaborator permission of a repository
|
||||||
|
func (c *Client) CollaboratorPermission(user, repo, collaborator string) (*CollaboratorPermissionResult, *Response, error) {
|
||||||
|
if err := escapeValidatePathSegments(&user, &repo, &collaborator); err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
rv := new(CollaboratorPermissionResult)
|
||||||
|
resp, err := c.getParsedResponse("GET",
|
||||||
|
fmt.Sprintf("/repos/%s/%s/collaborators/%s/permission", user, repo, collaborator),
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
rv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
if resp.StatusCode != 200 {
|
||||||
|
rv = nil
|
||||||
|
}
|
||||||
|
return rv, resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
// AddCollaboratorOption options when adding a user as a collaborator of a repository
|
// AddCollaboratorOption options when adding a user as a collaborator of a repository
|
||||||
type AddCollaboratorOption struct {
|
type AddCollaboratorOption struct {
|
||||||
Permission *AccessMode `json:"permission"`
|
Permission *AccessMode `json:"permission"`
|
||||||
|
|
|
@ -34,10 +34,22 @@ func TestRepoCollaborator(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 204, resp.StatusCode)
|
assert.EqualValues(t, 204, resp.StatusCode)
|
||||||
|
|
||||||
|
permissonPing, resp, err := c.CollaboratorPermission(repo.Owner.UserName, repo.Name, "ping")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 200, resp.StatusCode)
|
||||||
|
assert.EqualValues(t, AccessModeAdmin, permissonPing.Permission)
|
||||||
|
assert.EqualValues(t, "ping", permissonPing.User.UserName)
|
||||||
|
|
||||||
mode = AccessModeRead
|
mode = AccessModeRead
|
||||||
_, err = c.AddCollaborator(repo.Owner.UserName, repo.Name, "pong", AddCollaboratorOption{Permission: &mode})
|
_, err = c.AddCollaborator(repo.Owner.UserName, repo.Name, "pong", AddCollaboratorOption{Permission: &mode})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
permissonPong, resp, err := c.CollaboratorPermission(repo.Owner.UserName, repo.Name, "pong")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 200, resp.StatusCode)
|
||||||
|
assert.EqualValues(t, AccessModeRead, permissonPong.Permission)
|
||||||
|
assert.EqualValues(t, "pong", permissonPong.User.UserName)
|
||||||
|
|
||||||
collaborators, _, err = c.ListCollaborators(repo.Owner.UserName, repo.Name, ListCollaboratorsOptions{})
|
collaborators, _, err = c.ListCollaborators(repo.Owner.UserName, repo.Name, ListCollaboratorsOptions{})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, collaborators, 2)
|
assert.Len(t, collaborators, 2)
|
||||||
|
@ -60,4 +72,9 @@ func TestRepoCollaborator(t *testing.T) {
|
||||||
collaborators, _, err = c.ListCollaborators(repo.Owner.UserName, repo.Name, ListCollaboratorsOptions{})
|
collaborators, _, err = c.ListCollaborators(repo.Owner.UserName, repo.Name, ListCollaboratorsOptions{})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, collaborators, 1)
|
assert.Len(t, collaborators, 1)
|
||||||
|
|
||||||
|
permissonNotExists, resp, err := c.CollaboratorPermission(repo.Owner.UserName, repo.Name, "user_that_not_exists")
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.EqualValues(t, 404, resp.StatusCode)
|
||||||
|
assert.Nil(t, permissonNotExists)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue