Skip to content
This repository was archived by the owner on Dec 4, 2023. It is now read-only.
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
Original file line number Diff line number Diff line change
Expand Up @@ -442,8 +442,11 @@ protected CompletableFuture<Void> onTeamsMembersAddedDispatch(

List<TeamsChannelAccount> teamsMembersAdded = new ArrayList<>();
for (ChannelAccount memberAdded : membersAdded) {
if (!memberAdded.getProperties().isEmpty()) {
// when the ChannelAccount object is fully a TeamsChannelAccount
boolean isBot = turnContext.getActivity().getRecipient() != null
&& StringUtils.equals(memberAdded.getId(), turnContext.getActivity().getRecipient().getId());

if (!memberAdded.getProperties().isEmpty() || isBot) {
// when the ChannelAccount object is fully a TeamsChannelAccount, or for the bot
// (when Teams changes the service to return the full details)
try {
JsonNode node = mapper.valueToTree(memberAdded);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -324,11 +324,7 @@ public static CompletableFuture<Pair<ConversationReference, String>> sendMessage

ConversationParameters conversationParameters = new ConversationParameters();
conversationParameters.setIsGroup(true);
// conversationParameters.setChannelData(new Object() {
// Object channel = new Object() {
// String id = teamsChannelId;
// };
// });

conversationParameters.setChannelData(teamsChannelData);
conversationParameters.setActivity(activity);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,43 @@
import java.util.concurrent.atomic.AtomicReference;

public class TeamsActivityHandlerTests {
@Test
public void TestConversationUpdateBotTeamsMemberAdded() {
String baseUri = "https://test.coffee";
ConnectorClient connectorClient = getConnectorClient(
"http://localhost/",
MicrosoftAppCredentials.empty()
);

Activity activity = new Activity(ActivityTypes.CONVERSATION_UPDATE) {
{
setMembersAdded(new ArrayList<ChannelAccount>() {
{
add(new ChannelAccount("botid-1"));
}
});
setRecipient(new ChannelAccount("botid-1"));
setChannelData(new TeamsChannelData() {
{
setEventType("teamMemberAdded");
setTeam(new TeamInfo("team-id"));
}
});
setChannelId(Channels.MSTEAMS);
}
};

TurnContext turnContext = new TurnContextImpl(new SimpleAdapter(), activity);
turnContext.getTurnState().add(BotFrameworkAdapter.CONNECTOR_CLIENT_KEY, connectorClient);

TestActivityHandler bot = new TestActivityHandler();
bot.onTurn(turnContext).join();

Assert.assertEquals(2, bot.record.size());
Assert.assertEquals("onConversationUpdateActivity", bot.record.get(0));
Assert.assertEquals("onTeamsMembersAdded", bot.record.get(1));
}

@Test
public void TestConversationUpdateTeamsMemberAdded() {
String baseUri = "https://test.coffee";
Expand Down Expand Up @@ -100,7 +137,7 @@ public void TestConversationUpdateTeamsMemberAddedNoTeam() {
{
setMembersAdded(new ArrayList<ChannelAccount>() {
{
add(new ChannelAccount("id-3"));
add(new ChannelAccount("id-1"));
}
});
setRecipient(new ChannelAccount("b"));
Expand Down Expand Up @@ -1272,6 +1309,72 @@ private static ConnectorClient getConnectorClient(String baseUri, AppCredentials
})
);

// getConversationMember (Team)
Mockito.when(mockConversations.getConversationMember("id-1", "team-id")).thenReturn(
CompletableFuture.completedFuture(
new ChannelAccount() {
{
setId("id-1");
setName("name-1");
setProperties(
"objectId",
JsonNodeFactory.instance.textNode("objectId-1")
);
setProperties(
"givenName",
JsonNodeFactory.instance.textNode("givenName-1")
);
setProperties(
"surname",
JsonNodeFactory.instance.textNode("surname-1")
);
setProperties("email", JsonNodeFactory.instance.textNode("email-1"));
setProperties(
"userPrincipalName",
JsonNodeFactory.instance.textNode("userPrincipalName-1")
);
setProperties(
"tenantId",
JsonNodeFactory.instance.textNode("tenantId-1")
);
}
}
)
);

// getConversationMember (Group chat)
Mockito.when(mockConversations.getConversationMember("id-1", "conversation-id")).thenReturn(
CompletableFuture.completedFuture(
new ChannelAccount() {
{
setId("id-1");
setName("name-1");
setProperties(
"objectId",
JsonNodeFactory.instance.textNode("objectId-1")
);
setProperties(
"givenName",
JsonNodeFactory.instance.textNode("givenName-1")
);
setProperties(
"surname",
JsonNodeFactory.instance.textNode("surname-1")
);
setProperties("email", JsonNodeFactory.instance.textNode("email-1"));
setProperties(
"userPrincipalName",
JsonNodeFactory.instance.textNode("userPrincipalName-1")
);
setProperties(
"tenantId",
JsonNodeFactory.instance.textNode("tenantId-1")
);
}
}
)
);

ConnectorClient mockConnectorClient = Mockito.mock(ConnectorClient.class);
Mockito.when(mockConnectorClient.getConversations()).thenReturn(mockConversations);
Mockito.when(mockConnectorClient.baseUrl()).thenReturn(baseUri);
Expand Down