Skip to content

Commit

Permalink
PLAT-9069: Handle null for bad data structure to getMentions (#116)
Browse files Browse the repository at this point in the history
* PLAT-9069: Handle null for bad data structure to getMentions

* PLAT-9069: Add unittest for getMentions function

Co-authored-by: Hong-Duong Le <[email protected]>
  • Loading branch information
symphony-hong and Hong-Duong Le authored May 28, 2020
1 parent d4e1609 commit 041af0d
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/main/java/utils/SymMessageParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,11 @@ private static <T> List<T> getTags(InboundMessage message, String type, Class<T>
return null;
}
return (List<T>) StreamSupport.stream(readTree(message.getData()).spliterator(), false)
.filter(node -> node.has("id") && node.get("id").get(0).get("type").asText().equals(type))
.filter(node -> node.has("id"))
.filter(node -> node.get("id").size() > 0)
.filter(node -> node.get("id").get(0).has("type"))
.filter(node -> node.get("id").get(0).get("type").asText().equals(type))
.filter(node -> node.get("id").get(0).has("value"))
.map(node -> node.get("id").get(0).get("value"))
.map(node -> clazz == Long.class ? node.asLong() : node.asText())
.distinct()
Expand Down
75 changes: 75 additions & 0 deletions src/test/java/utils/SymMessageParserTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package utils;

import model.InboundMessage;
import org.junit.BeforeClass;
import org.junit.Test;

import static org.junit.Assert.*;
import java.util.List;


public class SymMessageParserTest {

private static InboundMessage mMessage;
private static List<Long> mentions;

@BeforeClass
public static void setUp() {
mMessage = new InboundMessage();
}

@Test
public void testNormalGetMentions() {
mMessage.setData("{\"0\":{\"id\":[{\"type\":\"com.symphony.user.userId\",\"value\":\"12987981103609\"}],\"type\":\"com.symphony.user.mention\"}}");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 1);
assertEquals(mentions.get(0).longValue(), 12987981103609L);
mMessage.setData("{\"0\":{\"id\":[{\"type\":\"com.symphony.user.userId\",\"value\":\"12987981103609\"}],\"type\":\"com.symphony.user.mention\"},"
+ "\"1\":{\"id\":[{\"type\":\"com.symphony.user.userId\",\"value\":\"12987981103610\"}],\"type\":\"com.symphony.user.mention\"}}");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 2);
assertEquals(mentions.get(0).longValue(), 12987981103609L);
assertEquals(mentions.get(1).longValue(), 12987981103610L);
}

@Test
public void testGetMentionsEmptyData() {
mMessage.setData("");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 0);
}

@Test
public void testGetMentionsNullData() {
mMessage.setData(null);
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 0);
}

@Test
public void testGetMentionsBadFormatData() {
mMessage.setData("{\"0\":{\"id\":[{\"bad-key-type\":\"com.symphony.user.userId\",\"value\":\"12987981103609\"}],\"type\":\"com.symphony.user.mention\"}}");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 0);
mMessage.setData("{\"0\":{\"id\":[{\"type\":\"com.symphony.user.userId\",\"bad-key-value\":\"12987981103609\"}],\"type\":\"com.symphony.user.mention\"}}");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 0);
mMessage.setData("{\"0\":{\"id\":[{\"bad-key-type\":\"com.symphony.user.userId\",\"value\":\"12987981103609\"}],\"type\":\"com.symphony.user.mention\"},"
+ "\"1\":{\"id\":[{\"type\":\"com.symphony.user.userId\",\"value\":\"12987981103610\"}],\"type\":\"com.symphony.user.mention\"}}");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 1);
assertEquals(mentions.get(0).longValue(), 12987981103610L);
}

@Test
public void testGetMentionsUnmatchedType() {
mMessage.setData("{\"0\":{\"id\":[{\"type\":\"unknown-type\",\"value\":\"12987981103609\"}],\"type\":\"com.symphony.user.mention\"}}");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 0);
mMessage.setData("{\"0\":{\"id\":[{\"type\":\"unknown-type\",\"value\":\"12987981103609\"}],\"type\":\"com.symphony.user.mention\"},"
+ "\"1\":{\"id\":[{\"type\":\"com.symphony.user.userId\",\"value\":\"12987981103610\"}],\"type\":\"com.symphony.user.mention\"}}");
mentions = SymMessageParser.getMentions(mMessage);
assertEquals(mentions.size(), 1);
assertEquals(mentions.get(0).longValue(), 12987981103610L);
}
}

0 comments on commit 041af0d

Please sign in to comment.