Skip to content
This repository was archived by the owner on Dec 4, 2023. It is now read-only.

Commit 507bce7

Browse files
author
Eric Dahlvang
committed
Do NOT call TeamsInfo.getMember for a bot added to conversation
1 parent 9ee4f4d commit 507bce7

File tree

3 files changed

+110
-8
lines changed

3 files changed

+110
-8
lines changed

libraries/bot-builder/src/main/java/com/microsoft/bot/builder/teams/TeamsActivityHandler.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,8 +442,11 @@ protected CompletableFuture<Void> onTeamsMembersAddedDispatch(
442442

443443
List<TeamsChannelAccount> teamsMembersAdded = new ArrayList<>();
444444
for (ChannelAccount memberAdded : membersAdded) {
445-
if (!memberAdded.getProperties().isEmpty()) {
446-
// when the ChannelAccount object is fully a TeamsChannelAccount
445+
boolean isBot = turnContext.getActivity().getRecipient() != null
446+
&& StringUtils.equals(memberAdded.getId(), turnContext.getActivity().getRecipient().getId());
447+
448+
if (!memberAdded.getProperties().isEmpty() || isBot) {
449+
// when the ChannelAccount object is fully a TeamsChannelAccount, or for the bot
447450
// (when Teams changes the service to return the full details)
448451
try {
449452
JsonNode node = mapper.valueToTree(memberAdded);

libraries/bot-builder/src/main/java/com/microsoft/bot/builder/teams/TeamsInfo.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,7 @@ public static CompletableFuture<Pair<ConversationReference, String>> sendMessage
324324

325325
ConversationParameters conversationParameters = new ConversationParameters();
326326
conversationParameters.setIsGroup(true);
327-
// conversationParameters.setChannelData(new Object() {
328-
// Object channel = new Object() {
329-
// String id = teamsChannelId;
330-
// };
331-
// });
327+
332328
conversationParameters.setChannelData(teamsChannelData);
333329
conversationParameters.setActivity(activity);
334330

libraries/bot-builder/src/test/java/com/microsoft/bot/builder/teams/TeamsActivityHandlerTests.java

Lines changed: 104 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,43 @@
5151
import java.util.concurrent.atomic.AtomicReference;
5252

5353
public class TeamsActivityHandlerTests {
54+
@Test
55+
public void TestConversationUpdateBotTeamsMemberAdded() {
56+
String baseUri = "https://test.coffee";
57+
ConnectorClient connectorClient = getConnectorClient(
58+
"http://localhost/",
59+
MicrosoftAppCredentials.empty()
60+
);
61+
62+
Activity activity = new Activity(ActivityTypes.CONVERSATION_UPDATE) {
63+
{
64+
setMembersAdded(new ArrayList<ChannelAccount>() {
65+
{
66+
add(new ChannelAccount("botid-1"));
67+
}
68+
});
69+
setRecipient(new ChannelAccount("botid-1"));
70+
setChannelData(new TeamsChannelData() {
71+
{
72+
setEventType("teamMemberAdded");
73+
setTeam(new TeamInfo("team-id"));
74+
}
75+
});
76+
setChannelId(Channels.MSTEAMS);
77+
}
78+
};
79+
80+
TurnContext turnContext = new TurnContextImpl(new SimpleAdapter(), activity);
81+
turnContext.getTurnState().add(BotFrameworkAdapter.CONNECTOR_CLIENT_KEY, connectorClient);
82+
83+
TestActivityHandler bot = new TestActivityHandler();
84+
bot.onTurn(turnContext).join();
85+
86+
Assert.assertEquals(2, bot.record.size());
87+
Assert.assertEquals("onConversationUpdateActivity", bot.record.get(0));
88+
Assert.assertEquals("onTeamsMembersAdded", bot.record.get(1));
89+
}
90+
5491
@Test
5592
public void TestConversationUpdateTeamsMemberAdded() {
5693
String baseUri = "https://test.coffee";
@@ -100,7 +137,7 @@ public void TestConversationUpdateTeamsMemberAddedNoTeam() {
100137
{
101138
setMembersAdded(new ArrayList<ChannelAccount>() {
102139
{
103-
add(new ChannelAccount("id-3"));
140+
add(new ChannelAccount("id-1"));
104141
}
105142
});
106143
setRecipient(new ChannelAccount("b"));
@@ -1272,6 +1309,72 @@ private static ConnectorClient getConnectorClient(String baseUri, AppCredentials
12721309
})
12731310
);
12741311

1312+
// getConversationMember (Team)
1313+
Mockito.when(mockConversations.getConversationMember("id-1", "team-id")).thenReturn(
1314+
CompletableFuture.completedFuture(
1315+
new ChannelAccount() {
1316+
{
1317+
setId("id-1");
1318+
setName("name-1");
1319+
setProperties(
1320+
"objectId",
1321+
JsonNodeFactory.instance.textNode("objectId-1")
1322+
);
1323+
setProperties(
1324+
"givenName",
1325+
JsonNodeFactory.instance.textNode("givenName-1")
1326+
);
1327+
setProperties(
1328+
"surname",
1329+
JsonNodeFactory.instance.textNode("surname-1")
1330+
);
1331+
setProperties("email", JsonNodeFactory.instance.textNode("email-1"));
1332+
setProperties(
1333+
"userPrincipalName",
1334+
JsonNodeFactory.instance.textNode("userPrincipalName-1")
1335+
);
1336+
setProperties(
1337+
"tenantId",
1338+
JsonNodeFactory.instance.textNode("tenantId-1")
1339+
);
1340+
}
1341+
}
1342+
)
1343+
);
1344+
1345+
// getConversationMember (Group chat)
1346+
Mockito.when(mockConversations.getConversationMember("id-1", "conversation-id")).thenReturn(
1347+
CompletableFuture.completedFuture(
1348+
new ChannelAccount() {
1349+
{
1350+
setId("id-1");
1351+
setName("name-1");
1352+
setProperties(
1353+
"objectId",
1354+
JsonNodeFactory.instance.textNode("objectId-1")
1355+
);
1356+
setProperties(
1357+
"givenName",
1358+
JsonNodeFactory.instance.textNode("givenName-1")
1359+
);
1360+
setProperties(
1361+
"surname",
1362+
JsonNodeFactory.instance.textNode("surname-1")
1363+
);
1364+
setProperties("email", JsonNodeFactory.instance.textNode("email-1"));
1365+
setProperties(
1366+
"userPrincipalName",
1367+
JsonNodeFactory.instance.textNode("userPrincipalName-1")
1368+
);
1369+
setProperties(
1370+
"tenantId",
1371+
JsonNodeFactory.instance.textNode("tenantId-1")
1372+
);
1373+
}
1374+
}
1375+
)
1376+
);
1377+
12751378
ConnectorClient mockConnectorClient = Mockito.mock(ConnectorClient.class);
12761379
Mockito.when(mockConnectorClient.getConversations()).thenReturn(mockConversations);
12771380
Mockito.when(mockConnectorClient.baseUrl()).thenReturn(baseUri);

0 commit comments

Comments
 (0)