Skip to content

Commit fb068de

Browse files
thewheatchoran
authored andcommitted
Add support for new Admin endpoints and attributes (#198)
1 parent aefbaf4 commit fb068de

File tree

7 files changed

+316
-1
lines changed

7 files changed

+316
-1
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,12 @@ AdminCollection admins = Admin.list();
305305
while(admins.hasNext()) {
306306
System.out.println(admins.next().getName());
307307
}
308+
309+
// Find admin by ID
310+
Admin admin = Admin.find("123456");
311+
312+
// Set admin as away and enable away mode reassignment
313+
Admin admin = Admin.setAwayMode("123456", true, true);
308314
```
309315

310316

intercom-java/src/main/java/io/intercom/api/Admin.java

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.fasterxml.jackson.annotation.JsonProperty;
88
import com.google.common.collect.Maps;
99

10+
import java.net.URI;
11+
import java.util.List;
1012
import java.util.Map;
1113

1214

@@ -30,9 +32,25 @@ public static AdminCollection list()
3032
return DataResource.list(SENTINEL, "admins", AdminCollection.class);
3133
}
3234

35+
public static Admin find(String id)
36+
throws AuthorizationException, ClientException, ServerException, InvalidException, RateLimitException {
37+
final HttpClient resource = new HttpClient(UriBuilder.newBuilder().path("admins").path(id).build());
38+
return resource.get(Admin.class);
39+
}
40+
41+
public static Admin setAwayMode(String id, boolean away_mode_enabled, boolean away_mode_reassign) {
42+
final URI uri = UriBuilder.newBuilder()
43+
.path("admins")
44+
.path(id)
45+
.path("away")
46+
.build();
47+
return new HttpClient(uri)
48+
.put(Admin.class, new AdminAwayMode(id, away_mode_enabled, away_mode_reassign));
49+
}
50+
3351
@SuppressWarnings("FieldCanBeLocal")
3452
@JsonProperty("type")
35-
private final String type = "admin";
53+
private String type = "admin";
3654

3755
@JsonProperty("id")
3856
private String id;
@@ -55,6 +73,21 @@ public static AdminCollection list()
5573
@JsonProperty("closed")
5674
private long closed;
5775

76+
@JsonProperty("away_mode_enabled")
77+
private boolean awayModeEnabled;
78+
79+
@JsonProperty("away_mode_reassign")
80+
private boolean awayModeReassign;
81+
82+
@JsonProperty("avatar")
83+
private Avatar avatar;
84+
85+
@JsonProperty("team_ids")
86+
private List<String> teamIds;
87+
88+
@JsonProperty("admin_ids")
89+
private List<String> adminIds;
90+
5891
public Admin() {
5992
}
6093

@@ -110,6 +143,26 @@ public long getClosed() {
110143
return closed;
111144
}
112145

146+
public boolean getAwayModeEnabled(){
147+
return awayModeEnabled;
148+
}
149+
150+
public boolean getAwayModeReassign(){
151+
return awayModeReassign;
152+
}
153+
154+
public Avatar getAvatar(){
155+
return avatar;
156+
}
157+
158+
public List getTeamIds(){
159+
return teamIds;
160+
}
161+
public List getAdminIds(){
162+
return adminIds;
163+
}
164+
165+
113166
@Override
114167
public boolean equals(Object o) {
115168
if (this == o) return true;
@@ -124,6 +177,12 @@ public boolean equals(Object o) {
124177
if (email != null ? !email.equals(admin.email) : admin.email != null) return false;
125178
if (id != null ? !id.equals(admin.id) : admin.id != null) return false;
126179
if (name != null ? !name.equals(admin.name) : admin.name != null) return false;
180+
if (awayModeEnabled != admin.awayModeEnabled) return false;
181+
if (awayModeReassign != admin.awayModeReassign) return false;
182+
if (avatar != null ? !avatar.equals(admin.avatar) : admin.avatar != null) return false;
183+
if (teamIds != null ? !teamIds.equals(admin.teamIds) : admin.teamIds != null) return false;
184+
if (adminIds != null ? !adminIds.equals(admin.adminIds) : admin.adminIds != null) return false;
185+
127186
//noinspection RedundantIfStatement
128187
if (!type.equals(admin.type)) return false;
129188

@@ -140,6 +199,11 @@ public int hashCode() {
140199
result = 31 * result + (int) (updatedAt ^ (updatedAt >>> 32));
141200
result = 31 * result + (int) (open ^ (open >>> 32));
142201
result = 31 * result + (int) (closed ^ (closed >>> 32));
202+
result = 31 * result + (awayModeEnabled ? 1 : 0);
203+
result = 31 * result + (awayModeReassign ? 1 : 0);
204+
result = 31 * result + (avatar != null ? avatar.hashCode() : 0);
205+
result = 31 * result + (teamIds != null ? teamIds.hashCode() : 0);
206+
result = 31 * result + (adminIds != null ? adminIds.hashCode() : 0);
143207
return result;
144208
}
145209

@@ -151,6 +215,11 @@ public String toString() {
151215
", email='" + email + '\'' +
152216
", createdAt=" + createdAt +
153217
", updatedAt=" + updatedAt +
218+
", awayModeEnabled=" + awayModeEnabled +
219+
", awayModeReassign=" + awayModeReassign +
220+
", teamIds=" + teamIds +
221+
", adminIds=" + adminIds+
222+
", avatar=" + avatar+
154223
"} " + super.toString();
155224
}
156225

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.intercom.api;
2+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
6+
@SuppressWarnings("UnusedDeclaration")
7+
@JsonIgnoreProperties(ignoreUnknown = true)
8+
@JsonInclude(JsonInclude.Include.NON_EMPTY)
9+
public class AdminAwayMode extends TypedData {
10+
11+
@JsonProperty("id")
12+
private String id;
13+
14+
@JsonProperty("away_mode_enabled")
15+
private boolean awayModeEnabled;
16+
17+
@JsonProperty("away_mode_reassign")
18+
private boolean awayModeReassign;
19+
20+
public AdminAwayMode(String Id, boolean awayModeEnabled, boolean awayModeReassign) {
21+
this.id = id;
22+
this.awayModeEnabled = awayModeEnabled;
23+
this.awayModeReassign = awayModeReassign;
24+
}
25+
String getId() {
26+
return id;
27+
}
28+
public boolean getAwayModeEnabled(){
29+
return awayModeEnabled;
30+
}
31+
32+
public boolean getAwayModeReassign(){
33+
return awayModeReassign;
34+
}
35+
36+
@Override
37+
public String toString() {
38+
return "AdminAwayMode{" +
39+
"id='" + id + '\'' +
40+
", awayModeEnabled=" + awayModeEnabled +
41+
", awayModeReassign=" + awayModeReassign +
42+
"} " + super.toString();
43+
}
44+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package io.intercom.api;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.google.common.collect.Lists;
5+
import org.junit.BeforeClass;
6+
import org.junit.Test;
7+
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
import static io.intercom.api.TestSupport.load;
12+
import static org.junit.Assert.*;
13+
14+
public class AdminTest {
15+
16+
private static ObjectMapper mapper;
17+
18+
@BeforeClass
19+
public static void beforeClass() {
20+
mapper = MapperSupport.objectMapper();
21+
}
22+
23+
@Test
24+
public void TestAdminParseJson() throws Exception {
25+
String json = load("admin.json");
26+
final Admin admin = mapper.readValue(json, Admin.class);
27+
assertEquals("admin", admin.getType());
28+
assertEquals("123456", admin.getId());
29+
assertEquals("Admin Name", admin.getName());
30+
assertEquals("[email protected]", admin.getEmail());
31+
assertTrue(admin.getAwayModeEnabled());
32+
assertFalse(admin.getAwayModeReassign());
33+
assertEquals( "https://avatarurl.com/image.jpg", admin.getAvatar().getImageURL().toString());
34+
assertNotNull(admin.getTeamIds());
35+
assertEquals(3, admin.getTeamIds().size());
36+
assertTrue(admin.getTeamIds().contains("123"));
37+
assertTrue(admin.getTeamIds().contains("456"));
38+
assertTrue(admin.getTeamIds().contains("789"));
39+
}
40+
41+
@Test
42+
public void TestAdminTeamParseJson() throws Exception {
43+
String json = load("admin_team.json");
44+
final Admin admin = mapper.readValue(json, Admin.class);
45+
assertEquals("team", admin.getType());
46+
assertEquals("654321", admin.getId());
47+
assertEquals("A Team", admin.getName());
48+
assertEquals("[email protected]", admin.getEmail());
49+
assertFalse(admin.getAwayModeEnabled());
50+
assertFalse(admin.getAwayModeReassign());
51+
assertEquals("https://domain.com/avatar", admin.getAvatar().getImageURL().toString());
52+
assertNotNull(admin.getAdminIds());
53+
assertEquals(3, admin.getAdminIds().size());
54+
assertTrue(admin.getAdminIds().contains("321"));
55+
assertTrue(admin.getAdminIds().contains("654"));
56+
assertTrue(admin.getAdminIds().contains("987"));
57+
}
58+
59+
60+
@Test
61+
public void TestAdminParseAdminList() throws Exception {
62+
String json = load("admins.json");
63+
final AdminCollection adminCollection = mapper.readValue(json, AdminCollection.class);
64+
65+
assertEquals(6, adminCollection.getPage().size());
66+
}
67+
68+
@Test
69+
public void TestAdminSerialiseDeserialise() throws Exception {
70+
String json = load("admin.json");
71+
final Admin admin = mapper.readValue(json, Admin.class);
72+
final String json1 = mapper.writeValueAsString(admin);
73+
System.out.println(json1);
74+
final Admin admin1 = mapper.readValue(json1, Admin.class);
75+
assertTrue(admin.equals(admin1));
76+
}
77+
78+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"type": "admin",
3+
"id": "123456",
4+
"name": "Admin Name",
5+
"email": "[email protected]",
6+
"away_mode_enabled": true,
7+
"away_mode_reassign": false,
8+
"avatar": {
9+
"image_url": "https://avatarurl.com/image.jpg"
10+
},
11+
"team_ids": [
12+
123,
13+
456,
14+
789
15+
]
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"type": "team",
3+
"id": "654321",
4+
"name": "A Team",
5+
"email": "[email protected]",
6+
"away_mode_enabled": false,
7+
"away_mode_reassign": false,
8+
"avatar": {
9+
"image_url": "https://domain.com/avatar"
10+
},
11+
"admin_ids": [
12+
987,
13+
654,
14+
321
15+
]
16+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{
2+
"type": "admin.list",
3+
"admins": [
4+
{
5+
"type": "admin",
6+
"id": "123456",
7+
"name": "Admin Name",
8+
"email": "[email protected]",
9+
"away_mode_enabled": true,
10+
"away_mode_reassign": false,
11+
"avatar": {
12+
"image_url": "https://avatarurl.com/image.jpg"
13+
},
14+
"team_ids": [
15+
123,
16+
456,
17+
789
18+
]
19+
},
20+
{
21+
"type": "admin",
22+
"id": "234567",
23+
"name": "Admin2 Name",
24+
"email": "[email protected]",
25+
"away_mode_enabled": false,
26+
"away_mode_reassign": false,
27+
"avatar": {
28+
"image_url": "https://avatarurl.com/image2.jpg"
29+
},
30+
"team_ids": [
31+
456,
32+
789
33+
]
34+
},
35+
{
36+
"type": "team",
37+
"id": "123",
38+
"name": "A Team",
39+
"email": "[email protected]",
40+
"away_mode_enabled": false,
41+
"away_mode_reassign": false,
42+
"avatar": {
43+
"image_url": "https://domain.com/avatar"
44+
},
45+
"admin_ids": [
46+
123456,
47+
234567
48+
]
49+
},
50+
{
51+
"type": "team",
52+
"id": "456",
53+
"name": "B Team",
54+
"email": "[email protected]",
55+
"away_mode_enabled": false,
56+
"away_mode_reassign": false,
57+
"avatar": {
58+
"image_url": "https://domain.com/avatar2"
59+
},
60+
"admin_ids": [
61+
123456
62+
]
63+
},
64+
{
65+
"type": "team",
66+
"id": "789",
67+
"name": "C Team",
68+
"email": "[email protected]",
69+
"away_mode_enabled": false,
70+
"away_mode_reassign": false,
71+
"avatar": {
72+
"image_url": "https://domain.com/avatar3"
73+
},
74+
"admin_ids": [
75+
]
76+
},
77+
{
78+
"type": "admin",
79+
"email": "[email protected]",
80+
"id": "807",
81+
"name": "A bot",
82+
"away_mode_enabled": false,
83+
"away_mode_reassign": false
84+
}
85+
]
86+
}

0 commit comments

Comments
 (0)