Skip to content

Commit 84dc88c

Browse files
authored
Merge pull request #407 from gaurav2493/user_change_event_fix
Fix for UnsupportedOperationException in user_change event
2 parents aca7d1a + 13a245e commit 84dc88c

File tree

2 files changed

+58
-19
lines changed

2 files changed

+58
-19
lines changed

bolt/src/main/java/com/slack/api/bolt/middleware/builtin/IgnoringSelfEvents.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
package com.slack.api.bolt.middleware.builtin;
22

3+
import lombok.extern.slf4j.Slf4j;
4+
5+
import java.io.IOException;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.concurrent.ConcurrentHashMap;
9+
import java.util.concurrent.ConcurrentMap;
10+
311
import com.google.gson.Gson;
412
import com.google.gson.JsonElement;
513
import com.google.gson.JsonObject;
@@ -16,13 +24,6 @@
1624
import com.slack.api.model.event.MemberJoinedChannelEvent;
1725
import com.slack.api.model.event.MemberLeftChannelEvent;
1826
import com.slack.api.util.json.GsonFactory;
19-
import lombok.extern.slf4j.Slf4j;
20-
21-
import java.io.IOException;
22-
import java.util.ArrayList;
23-
import java.util.List;
24-
import java.util.concurrent.ConcurrentHashMap;
25-
import java.util.concurrent.ConcurrentMap;
2627

2728
/**
2829
* Filters some events that may be generated by this app for Events API.
@@ -75,7 +76,14 @@ public Response apply(Request req, Response resp, MiddlewareChain chain) throws
7576
JsonObject eventElem = extractEventElem(eventRequest.getRequestBodyAsString());
7677
if (eventElem != null) {
7778
JsonElement eventUserIdElem = eventElem.get("user");
78-
String eventBotUserId = eventUserIdElem != null ? eventUserIdElem.getAsString() : null;
79+
String eventBotUserId = null;
80+
if (eventUserIdElem != null) {
81+
if (eventUserIdElem.isJsonObject()) {
82+
eventBotUserId = eventUserIdElem.getAsJsonObject().get("id").getAsString();
83+
} else {
84+
eventBotUserId = eventUserIdElem.getAsString();
85+
}
86+
}
7987
JsonElement botIdElem = eventElem.get("bot_id");
8088
if (eventBotUserId == null && botIdElem != null) {
8189
String botId = botIdElem.getAsString();

bolt/src/test/java/test_locally/middleware/IgnoringSelfEventsTest.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,36 @@
11
package test_locally.middleware;
22

3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
5+
import static org.junit.Assert.assertNull;
6+
import static util.MockSlackApi.InvalidToken;
7+
import static util.MockSlackApi.ValidToken;
8+
9+
import util.MockSlackApiServer;
10+
11+
import java.util.Collections;
12+
import java.util.HashMap;
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
import org.junit.Test;
17+
318
import com.slack.api.Slack;
419
import com.slack.api.SlackConfig;
520
import com.slack.api.app_backend.events.payload.MemberJoinedChannelPayload;
621
import com.slack.api.app_backend.events.payload.MessagePayload;
22+
import com.slack.api.app_backend.events.payload.UserChangePayload;
723
import com.slack.api.bolt.middleware.MiddlewareChain;
824
import com.slack.api.bolt.middleware.builtin.IgnoringSelfEvents;
925
import com.slack.api.bolt.request.RequestHeaders;
1026
import com.slack.api.bolt.request.builtin.EventRequest;
1127
import com.slack.api.bolt.response.Response;
1228
import com.slack.api.methods.MethodsClient;
29+
import com.slack.api.model.User;
1330
import com.slack.api.model.event.MemberJoinedChannelEvent;
1431
import com.slack.api.model.event.MessageEvent;
32+
import com.slack.api.model.event.UserChangeEvent;
1533
import com.slack.api.util.json.GsonFactory;
16-
import org.junit.Test;
17-
import util.MockSlackApiServer;
18-
19-
import java.util.Collections;
20-
import java.util.HashMap;
21-
import java.util.List;
22-
import java.util.Map;
23-
24-
import static org.junit.Assert.*;
25-
import static util.MockSlackApi.InvalidToken;
26-
import static util.MockSlackApi.ValidToken;
2734

2835
public class IgnoringSelfEventsTest {
2936

@@ -77,6 +84,30 @@ public String findAndSaveBotUserId(MethodsClient client, String botId) {
7784
assertEquals(404L, result.getStatusCode().longValue());
7885
}
7986

87+
@Test
88+
public void ignored_withUserObject() throws Exception {
89+
IgnoringSelfEvents middleware = new IgnoringSelfEvents(SlackConfig.DEFAULT) {
90+
@Override
91+
public String findAndSaveBotUserId(MethodsClient client, String botId) {
92+
return "U123BOT";
93+
}
94+
};
95+
Map<String, List<String>> rawHeaders = new HashMap<>();
96+
RequestHeaders headers = new RequestHeaders(rawHeaders);
97+
UserChangePayload payload = new UserChangePayload();
98+
payload.setTeamId("T123");
99+
UserChangeEvent event = new UserChangeEvent();
100+
User user = new User();
101+
user.setId("U123BOT");
102+
event.setUser(user);
103+
payload.setEvent(event);
104+
EventRequest req = new EventRequest(GsonFactory.createSnakeCase().toJson(payload), headers);
105+
req.getContext().setBotUserId("U123BOT");
106+
Response resp = new Response();
107+
Response result = middleware.apply(req, resp, chain);
108+
assertEquals(200L, result.getStatusCode().longValue());
109+
}
110+
80111
@Test
81112
public void not_ignored_no_botUserId() throws Exception {
82113
IgnoringSelfEvents middleware = new IgnoringSelfEvents(SlackConfig.DEFAULT) {

0 commit comments

Comments
 (0)