Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,12 @@ AdminCollection admins = Admin.list();
while(admins.hasNext()) {
System.out.println(admins.next().getName());
}

// Find admin by ID
Admin admin = Admin.find("123456");

// Set admin as away and enable away mode reassignment
Admin admin = Admin.setAwayMode("123456", true, true);
```


Expand Down
71 changes: 70 additions & 1 deletion intercom-java/src/main/java/io/intercom/api/Admin.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.Maps;

import java.net.URI;
import java.util.List;
import java.util.Map;


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

public static Admin find(String id)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you think we need a quick test for the find?
Just wanted to check if you think this is needed or not

throws AuthorizationException, ClientException, ServerException, InvalidException, RateLimitException {
final HttpClient resource = new HttpClient(UriBuilder.newBuilder().path("admins").path(id).build());
return resource.get(Admin.class);
}

public static Admin setAwayMode(String id, boolean away_mode_enabled, boolean away_mode_reassign) {
final URI uri = UriBuilder.newBuilder()
.path("admins")
.path(id)
.path("away")
.build();
return new HttpClient(uri)
.put(Admin.class, new AdminAwayMode(id, away_mode_enabled, away_mode_reassign));
}

@SuppressWarnings("FieldCanBeLocal")
@JsonProperty("type")
private final String type = "admin";
private String type = "admin";

@JsonProperty("id")
private String id;
Expand All @@ -55,6 +73,21 @@ public static AdminCollection list()
@JsonProperty("closed")
private long closed;

@JsonProperty("away_mode_enabled")
private boolean awayModeEnabled;

@JsonProperty("away_mode_reassign")
private boolean awayModeReassign;

@JsonProperty("avatar")
private Avatar avatar;

@JsonProperty("team_ids")
private List<String> teamIds;

@JsonProperty("admin_ids")
private List<String> adminIds;

public Admin() {
}

Expand Down Expand Up @@ -110,6 +143,26 @@ public long getClosed() {
return closed;
}

public boolean getAwayModeEnabled(){
return awayModeEnabled;
}

public boolean getAwayModeReassign(){
return awayModeReassign;
}

public Avatar getAvatar(){
return avatar;
}

public List getTeamIds(){
return teamIds;
}
public List getAdminIds(){
return adminIds;
}


@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand All @@ -124,6 +177,12 @@ public boolean equals(Object o) {
if (email != null ? !email.equals(admin.email) : admin.email != null) return false;
if (id != null ? !id.equals(admin.id) : admin.id != null) return false;
if (name != null ? !name.equals(admin.name) : admin.name != null) return false;
if (awayModeEnabled != admin.awayModeEnabled) return false;
if (awayModeReassign != admin.awayModeReassign) return false;
if (avatar != null ? !avatar.equals(admin.avatar) : admin.avatar != null) return false;
if (teamIds != null ? !teamIds.equals(admin.teamIds) : admin.teamIds != null) return false;
if (adminIds != null ? !adminIds.equals(admin.adminIds) : admin.adminIds != null) return false;

//noinspection RedundantIfStatement
if (!type.equals(admin.type)) return false;

Expand All @@ -140,6 +199,11 @@ public int hashCode() {
result = 31 * result + (int) (updatedAt ^ (updatedAt >>> 32));
result = 31 * result + (int) (open ^ (open >>> 32));
result = 31 * result + (int) (closed ^ (closed >>> 32));
result = 31 * result + (awayModeEnabled ? 1 : 0);
result = 31 * result + (awayModeReassign ? 1 : 0);
result = 31 * result + (avatar != null ? avatar.hashCode() : 0);
result = 31 * result + (teamIds != null ? teamIds.hashCode() : 0);
result = 31 * result + (adminIds != null ? adminIds.hashCode() : 0);
return result;
}

Expand All @@ -151,6 +215,11 @@ public String toString() {
", email='" + email + '\'' +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
", awayModeEnabled=" + awayModeEnabled +
", awayModeReassign=" + awayModeReassign +
", teamIds=" + teamIds +
", adminIds=" + adminIds+
", avatar=" + avatar+
"} " + super.toString();
}

Expand Down
44 changes: 44 additions & 0 deletions intercom-java/src/main/java/io/intercom/api/AdminAwayMode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package io.intercom.api;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

@SuppressWarnings("UnusedDeclaration")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AdminAwayMode extends TypedData {

@JsonProperty("id")
private String id;

@JsonProperty("away_mode_enabled")
private boolean awayModeEnabled;

@JsonProperty("away_mode_reassign")
private boolean awayModeReassign;

public AdminAwayMode(String Id, boolean awayModeEnabled, boolean awayModeReassign) {
this.id = id;
this.awayModeEnabled = awayModeEnabled;
this.awayModeReassign = awayModeReassign;
}
String getId() {
return id;
}
public boolean getAwayModeEnabled(){
return awayModeEnabled;
}

public boolean getAwayModeReassign(){
return awayModeReassign;
}

@Override
public String toString() {
return "AdminAwayMode{" +
"id='" + id + '\'' +
", awayModeEnabled=" + awayModeEnabled +
", awayModeReassign=" + awayModeReassign +
"} " + super.toString();
}
}
78 changes: 78 additions & 0 deletions intercom-java/src/test/java/io/intercom/api/AdminTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package io.intercom.api;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.List;
import java.util.Map;

import static io.intercom.api.TestSupport.load;
import static org.junit.Assert.*;

public class AdminTest {

private static ObjectMapper mapper;

@BeforeClass
public static void beforeClass() {
mapper = MapperSupport.objectMapper();
}

@Test
public void TestAdminParseJson() throws Exception {
String json = load("admin.json");
final Admin admin = mapper.readValue(json, Admin.class);
assertEquals("admin", admin.getType());
assertEquals("123456", admin.getId());
assertEquals("Admin Name", admin.getName());
assertEquals("admin@domain.com", admin.getEmail());
assertTrue(admin.getAwayModeEnabled());
assertFalse(admin.getAwayModeReassign());
assertEquals( "https://avatarurl.com/image.jpg", admin.getAvatar().getImageURL().toString());
assertNotNull(admin.getTeamIds());
assertEquals(3, admin.getTeamIds().size());
assertTrue(admin.getTeamIds().contains("123"));
assertTrue(admin.getTeamIds().contains("456"));
assertTrue(admin.getTeamIds().contains("789"));
}

@Test
public void TestAdminTeamParseJson() throws Exception {
String json = load("admin_team.json");
final Admin admin = mapper.readValue(json, Admin.class);
assertEquals("team", admin.getType());
assertEquals("654321", admin.getId());
assertEquals("A Team", admin.getName());
assertEquals("team-email@teams.intercom.io", admin.getEmail());
assertFalse(admin.getAwayModeEnabled());
assertFalse(admin.getAwayModeReassign());
assertEquals("https://domain.com/avatar", admin.getAvatar().getImageURL().toString());
assertNotNull(admin.getAdminIds());
assertEquals(3, admin.getAdminIds().size());
assertTrue(admin.getAdminIds().contains("321"));
assertTrue(admin.getAdminIds().contains("654"));
assertTrue(admin.getAdminIds().contains("987"));
}


@Test
public void TestAdminParseAdminList() throws Exception {
String json = load("admins.json");
final AdminCollection adminCollection = mapper.readValue(json, AdminCollection.class);

assertEquals(6, adminCollection.getPage().size());
}

@Test
public void TestAdminSerialiseDeserialise() throws Exception {
String json = load("admin.json");
final Admin admin = mapper.readValue(json, Admin.class);
final String json1 = mapper.writeValueAsString(admin);
System.out.println(json1);
final Admin admin1 = mapper.readValue(json1, Admin.class);
assertTrue(admin.equals(admin1));
}

}
16 changes: 16 additions & 0 deletions intercom-java/src/test/resources/admin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"type": "admin",
"id": "123456",
"name": "Admin Name",
"email": "admin@domain.com",
"away_mode_enabled": true,
"away_mode_reassign": false,
"avatar": {
"image_url": "https://avatarurl.com/image.jpg"
},
"team_ids": [
123,
456,
789
]
}
16 changes: 16 additions & 0 deletions intercom-java/src/test/resources/admin_team.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"type": "team",
"id": "654321",
"name": "A Team",
"email": "team-email@teams.intercom.io",
"away_mode_enabled": false,
"away_mode_reassign": false,
"avatar": {
"image_url": "https://domain.com/avatar"
},
"admin_ids": [
987,
654,
321
]
}
86 changes: 86 additions & 0 deletions intercom-java/src/test/resources/admins.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
{
"type": "admin.list",
"admins": [
{
"type": "admin",
"id": "123456",
"name": "Admin Name",
"email": "admin@domain.com",
"away_mode_enabled": true,
"away_mode_reassign": false,
"avatar": {
"image_url": "https://avatarurl.com/image.jpg"
},
"team_ids": [
123,
456,
789
]
},
{
"type": "admin",
"id": "234567",
"name": "Admin2 Name",
"email": "admin2@domain.com",
"away_mode_enabled": false,
"away_mode_reassign": false,
"avatar": {
"image_url": "https://avatarurl.com/image2.jpg"
},
"team_ids": [
456,
789
]
},
{
"type": "team",
"id": "123",
"name": "A Team",
"email": "team-email@teams.intercom.io",
"away_mode_enabled": false,
"away_mode_reassign": false,
"avatar": {
"image_url": "https://domain.com/avatar"
},
"admin_ids": [
123456,
234567
]
},
{
"type": "team",
"id": "456",
"name": "B Team",
"email": "team-email2@teams.intercom.io",
"away_mode_enabled": false,
"away_mode_reassign": false,
"avatar": {
"image_url": "https://domain.com/avatar2"
},
"admin_ids": [
123456
]
},
{
"type": "team",
"id": "789",
"name": "C Team",
"email": "team-email3@teams.intercom.io",
"away_mode_enabled": false,
"away_mode_reassign": false,
"avatar": {
"image_url": "https://domain.com/avatar3"
},
"admin_ids": [
]
},
{
"type": "admin",
"email": "bot-123123123@bots.intercom.io",
"id": "807",
"name": "A bot",
"away_mode_enabled": false,
"away_mode_reassign": false
}
]
}