From 041af0d6e52862f6b41661de68f5fc753dfac016 Mon Sep 17 00:00:00 2001 From: symphony-hong <65538951+symphony-hong@users.noreply.github.com> Date: Thu, 28 May 2020 19:46:14 +0200 Subject: [PATCH] PLAT-9069: Handle null for bad data structure to getMentions (#116) * PLAT-9069: Handle null for bad data structure to getMentions * PLAT-9069: Add unittest for getMentions function Co-authored-by: Hong-Duong Le --- src/main/java/utils/SymMessageParser.java | 6 +- src/test/java/utils/SymMessageParserTest.java | 75 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 src/test/java/utils/SymMessageParserTest.java diff --git a/src/main/java/utils/SymMessageParser.java b/src/main/java/utils/SymMessageParser.java index fc639fb7a..d9942ed77 100755 --- a/src/main/java/utils/SymMessageParser.java +++ b/src/main/java/utils/SymMessageParser.java @@ -74,7 +74,11 @@ private static List getTags(InboundMessage message, String type, Class return null; } return (List) 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() diff --git a/src/test/java/utils/SymMessageParserTest.java b/src/test/java/utils/SymMessageParserTest.java new file mode 100644 index 000000000..964932376 --- /dev/null +++ b/src/test/java/utils/SymMessageParserTest.java @@ -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 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); + } +}