Skip to content

Commit

Permalink
Add support to search user by external_id
Browse files Browse the repository at this point in the history
  • Loading branch information
tucksaun authored and eggman64 committed Nov 26, 2018
1 parent e4f141b commit 3f2acc5
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
12 changes: 12 additions & 0 deletions zendesk/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,18 @@ func (c *client) SearchUsers(query string) ([]User, error) {
return out.Users, err
}

// SearchUsersByExternalID searches users by external_id.
//
// Zendesk Core API docs: https://developer.zendesk.com/rest_api/docs/core/users#search-users
func (c *client) SearchUserByExternalID(externalID string) (*User, error) {
out := new(APIPayload)
err := c.get("/api/v2/users/search.json?external_id="+externalID, out)
if len(out.Users) != 1 {
return nil, err
}
return &out.Users[0], err
}

// AddUserTags adds a tag to a user
//
// Zendesk Core API docs: https://developer.zendesk.com/rest_api/docs/core/tags#add-tags
Expand Down
16 changes: 14 additions & 2 deletions zendesk/user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,25 @@ func TestUserCRUD(t *testing.T) {
require.NoError(t, err)

input := User{
Name: String(randString(16)),
Email: String(randString(16) + "@example.com"),
Name: String(randString(16)),
Email: String(randString(16) + "@example.com"),
ExternalID: String(randString(16)),
}

created, err := client.CreateUser(&input)
require.NoError(t, err)
require.NotNil(t, created.ID)
require.Equal(t, *input.Name, *created.Name)
require.Equal(t, *input.Email, *created.Email)
require.Equal(t, *input.ExternalID, *created.ExternalID)
require.True(t, *created.Active)

found, err := client.ShowUser(*created.ID)
require.NoError(t, err)
require.Equal(t, *created.ID, *found.ID)
require.Equal(t, *input.Name, *found.Name)
require.Equal(t, *input.Email, *found.Email)
require.Equal(t, *input.ExternalID, *found.ExternalID)

input = User{
Name: String("Testy Testacular"),
Expand All @@ -45,6 +48,15 @@ func TestUserCRUD(t *testing.T) {
require.Len(t, searched, 1)
require.Equal(t, updated, &searched[0])

found, err = client.SearchUserByExternalID(*updated.ExternalID)
require.NoError(t, err)
require.Equal(t, updated, found)

var nilUser *User
found, err = client.SearchUserByExternalID("non-existent")
require.NoError(t, err)
require.Equal(t, nilUser, found)

other, err := client.CreateUser(&User{
Name: String(randString(16)),
Email: String(randString(16) + "@example.com"),
Expand Down
1 change: 1 addition & 0 deletions zendesk/zendesk.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ type Client interface {
PermanentlyDeleteUser(int64) (*User, error)
RedactCommentString(int64, int64, string) (*TicketComment, error)
SearchUsers(string) ([]User, error)
SearchUserByExternalID(string) (*User, error)
ShowComplianceDeletionStatuses(int64) ([]ComplianceDeletionStatus, error)
ShowIdentity(int64, int64) (*UserIdentity, error)
ShowJobStatus(string) (*JobStatus, error)
Expand Down

0 comments on commit 3f2acc5

Please sign in to comment.