Skip to content

Commit 1978256

Browse files
committed
Add member APIs access to Sentry
1 parent f58379a commit 1978256

File tree

2 files changed

+96
-7
lines changed

2 files changed

+96
-7
lines changed

member.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import (
88

99
// Member is a sentry member
1010
type Member struct {
11-
Email *string `json:"email,omitempty"`
11+
Email string `json:"email,omitempty"`
1212
Expired *bool `json:"expired,omitempty"`
1313
Name *string `json:"name,omitempty"`
1414
IsPending *bool `json:"isPending,omitempty"`
1515
DateCreated *time.Time `json:"dateCreated,omitempty"`
16-
Role *string `json:"role,omitempty"`
16+
Role string `json:"role,omitempty"`
1717
ID *string `json:"id,omitempty"`
1818
RoleName *string `json:"roleName,omitempty"`
19+
Teams []string `json:"teams,omitempty"`
1920
}
2021

2122
type memberQuery struct {
@@ -28,7 +29,20 @@ func (o *memberQuery) ToQueryString() string {
2829
return query.Encode()
2930
}
3031

31-
// GetMember takes a user email and returns back the user
32+
// CreateMember takes an email and creates a new member
33+
func (c *Client) CreateMember(o Organization, email string) (Member, error) {
34+
var member Member
35+
memberRole := "member"
36+
memberreq := Member{
37+
Email: email,
38+
Role: memberRole,
39+
}
40+
41+
err := c.do("POST", fmt.Sprintf("organizations/%s/members", *o.Slug), &member, &memberreq)
42+
return member, err
43+
}
44+
45+
// GetMemberByEmail takes a user email and returns back the user
3246
func (c *Client) GetMemberByEmail(o Organization, memberEmail string) (Member, error) {
3347
var members []Member
3448

@@ -44,15 +58,19 @@ func (c *Client) GetMemberByEmail(o Organization, memberEmail string) (Member, e
4458
return members[0], err
4559
}
4660

47-
// AddMemberToTeam takes a member and adds them to a team
48-
func (c *Client) AddMemberToTeam(o Organization, t Team, m Member) error {
61+
// AddExistingMemberToTeam takes a member and adds them to a team
62+
func (c *Client) AddExistingMemberToTeam(o Organization, t Team, m Member) error {
4963
return c.do("POST", fmt.Sprintf("organizations/%s/members/%s/teams/%s", *o.Slug, *m.ID, *t.Slug), nil, nil)
5064
}
5165

66+
// DeleteMember takes a member and deletes from the org
67+
func (c *Client) DeleteMember(o Organization, m Member) error {
68+
return c.do("DELETE", fmt.Sprintf("organizations/%s/members/%s", *o.Slug, *m.ID), nil, nil)
69+
}
70+
5271
// MakeAdmin takes a member and makes them admin
5372
func (c *Client) MakeAdmin(o Organization, a Member) error {
54-
adminRole := "admin"
55-
a.Role = &adminRole
73+
a.Role = "admin"
5674

5775
return c.do("PUT", fmt.Sprintf("organizations/%s/members/%s", *o.Slug, *a.ID), nil, &a)
5876
}

member_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package sentry
2+
3+
import (
4+
"testing"
5+
)
6+
7+
const testEmail = "[email protected]"
8+
9+
func createMemberHelper(t *testing.T, org Organization) (Member, func() error) {
10+
client := newTestClient(t)
11+
12+
member, err := client.CreateMember(org, testEmail)
13+
if err != nil {
14+
t.Fatal(err)
15+
}
16+
17+
return member, func() error {
18+
return client.DeleteMember(org, member)
19+
}
20+
}
21+
22+
func getMemberHelper(t *testing.T, org Organization, email string) Member {
23+
client := newTestClient(t)
24+
25+
member, err := client.GetMemberByEmail(org, testEmail)
26+
if err != nil {
27+
t.Error(err)
28+
}
29+
30+
return member
31+
}
32+
33+
func TestMemberResource(t *testing.T) {
34+
t.Parallel()
35+
36+
client := newTestClient(t)
37+
org, err := client.GetOrganization(getDefaultOrg())
38+
if err != nil {
39+
t.Fatal(err)
40+
}
41+
42+
team, cleanUpTeam := createTeamHelper(t)
43+
defer cleanUpTeam()
44+
45+
member, cleanUpMember := createMemberHelper(t, org)
46+
defer cleanUpMember()
47+
48+
t.Run("Fetch member by email returns error if non existing member", func(t *testing.T) {
49+
_, err := client.GetMemberByEmail(org, "[email protected]")
50+
if err == nil {
51+
t.Error("Should have returned error for non existing member")
52+
}
53+
})
54+
55+
t.Run("Add member to team", func(t *testing.T) {
56+
if err := client.AddExistingMemberToTeam(org, team, member); err != nil {
57+
t.Error(err)
58+
}
59+
})
60+
61+
t.Run("Make member admin", func(t *testing.T) {
62+
if err := client.MakeAdmin(org, member); err != nil {
63+
t.Error(err)
64+
}
65+
66+
member := getMemberHelper(t, org, testEmail)
67+
if member.Role != "admin" {
68+
t.Error("Member not made admin")
69+
}
70+
})
71+
}

0 commit comments

Comments
 (0)