Skip to content

Commit

Permalink
add func for check membership
Browse files Browse the repository at this point in the history
  • Loading branch information
Direnol committed Nov 16, 2020
1 parent 3e8e3ea commit d379202
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
29 changes: 29 additions & 0 deletions teamcity/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package teamcity
import (
"fmt"
"net/http"
"strings"

"github.com/dghubble/sling"
)
Expand Down Expand Up @@ -181,3 +182,31 @@ func (s *UserService) groupDeleteByKey(locator Locator, groupKey string) (*Group
}
return &out, nil
}

// IsGroupMemberByID - checks the user's group membership by ID
func (s *UserService) IsGroupMemberByID(id int, key string) (bool, error) {
return s.isGroupMemberByLocator(LocatorID(fmt.Sprint(id)), key)
}

// IsGroupMemberByUsername - checks the user's group membership by Username
func (s *UserService) IsGroupMemberByUsername(username, key string) (bool, error) {
return s.isGroupMemberByLocator(LocatorUsername(username), key)
}

// IsGroupMemberByName - checks the user's group membership by Name
func (s *UserService) IsGroupMemberByName(name, key string) (bool, error) {
return s.isGroupMemberByLocator(LocatorName(name), key)
}

func (s *UserService) isGroupMemberByLocator(locator Locator, key string) (bool, error) {
var out Group
err := s.restHelper.get(fmt.Sprintf("%s/groups/%s", locator, LocatorKey(key)), &out, "User")
if err != nil {
strErr := err.Error()
if strings.Contains(strErr, "status code: 404") {
return false, nil
}
return false, err
}
return true, nil
}
20 changes: 20 additions & 0 deletions teamcity/user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,26 @@ func TestUser_Group(t *testing.T) {

}

func TestUser_Member(t *testing.T) {
client := setup()
admin, err := client.Users.GetByUsername("admin")
require.NoError(t, err)
groupKey := "ALL_USERS_GROUP"

member, err := client.Users.IsGroupMemberByID(admin.ID, groupKey)
require.NoError(t, err)
require.True(t, member)

member, err = client.Users.IsGroupMemberByID(admin.ID, "INVALID_GROUP")
require.NoError(t, err)
require.False(t, member)

member, err = client.Users.IsGroupMemberByUsername("INVALIDUSERNAME", groupKey)
require.NoError(t, err)
require.False(t, member)

}

func cleanUpUser(t *testing.T, client *teamcity.Client, id int) {
client.Users.DeleteByID(id)
}

0 comments on commit d379202

Please sign in to comment.