From b1e3f764175ef5d3adbf1a771d2abe68a2ecbf41 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 4 Nov 2010 10:15:40 -0400 Subject: [PATCH] INT-1554 added tests and refactored/cleaned XmppPresenceMessageMapper --- .../presence/XmppPresenceMessageMapper.java | 69 ++++++------ .../XmppPresenceMessageMapperTests.java | 106 ++++++++++++++++++ 2 files changed, 142 insertions(+), 33 deletions(-) create mode 100644 spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapperTests.java diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java index 0ca9beb4cd..33a3bf9f45 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java @@ -15,12 +15,11 @@ */ package org.springframework.integration.xmpp.presence; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.jivesoftware.smack.packet.Presence; import org.springframework.integration.Message; import org.springframework.integration.MessageHeaders; import org.springframework.integration.mapping.InboundMessageMapper; +import org.springframework.integration.mapping.MessageMappingException; import org.springframework.integration.mapping.OutboundMessageMapper; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.xmpp.XmppHeaders; @@ -28,21 +27,21 @@ import org.springframework.util.StringUtils; /** - * Implementation of the strategy interface {@link org.springframework.integration.mapping.OutboundMessageMapper}. This is the hook that lets the adapter receive various payloads from - * components inside Spring Integration and forward them correctly as {@link org.jivesoftware.smack.packet.Presence} instances. + * Implementation of the strategy interface {@link OutboundMessageMapper} + * which maps {@link Presence} to {@link Message} * * @author Josh Long + * @author Oleg Zhurakousky * @since 2.0 */ public class XmppPresenceMessageMapper implements OutboundMessageMapper, InboundMessageMapper { - private static final Log logger = LogFactory.getLog(XmppPresenceMessageMapper.class); - /** - * Returns a {@link org.springframework.integration.Message} with payload {@link org.jivesoftware.smack.packet.Presence} + * Builds {@link Message} with payload of {@link Presence} while also + * setting Presense attributes as {@link MessageHeaders} * - * @param presence the presence object that can be used to present the priority, status, mode, and type of a given roster entry. This will be decomposed into a series of headers, as well as a payload + * @param presence the presence object * @return the Message * @throws Exception thrown if conversion should fail */ @@ -72,46 +71,50 @@ public class XmppPresenceMessageMapper implements OutboundMessageMapper message = MessageBuilder.withPayload(presence).build(); + XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); + Presence mappedPresence = mapper.fromMessage(message); + assertEquals(Mode.chat, mappedPresence.getMode()); + assertEquals(Type.available, mappedPresence.getType()); + assertEquals("Hello", mappedPresence.getStatus()); + assertEquals(1, mappedPresence.getPriority()); + } + + @Test + public void testFromMessageWithPayloadPresenceType() throws Exception{ + Message message = MessageBuilder.withPayload(Type.available) + .setHeader(XmppHeaders.PRESENCE_FROM, "oleg") + .setHeader(XmppHeaders.PRESENCE_MODE, Mode.chat) + .setHeader(XmppHeaders.PRESENCE_STATUS, "hello") + .setHeader(XmppHeaders.PRESENCE_TYPE, Type.subscribed) + .setHeader(XmppHeaders.PRESENCE_PRIORITY, 1) + .build(); + XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); + Presence mappedPresence = mapper.fromMessage(message); + assertEquals(Mode.chat, mappedPresence.getMode()); + assertEquals(Type.available, mappedPresence.getType()); + assertEquals("hello", mappedPresence.getStatus()); + assertEquals(1, mappedPresence.getPriority()); + } + @Test + public void testFromMessageWithPayloadPresenceTypeAndStringModeType() throws Exception{ + Message message = MessageBuilder.withPayload(Type.available) + .setHeader(XmppHeaders.PRESENCE_FROM, "oleg") + .setHeader(XmppHeaders.PRESENCE_MODE, "chat") + .setHeader(XmppHeaders.PRESENCE_STATUS, "hello") + .setHeader(XmppHeaders.PRESENCE_TYPE, "subscribed") + .setHeader(XmppHeaders.PRESENCE_PRIORITY, 1) + .build(); + XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); + Presence mappedPresence = mapper.fromMessage(message); + assertEquals(Mode.chat, mappedPresence.getMode()); + assertEquals(Type.available, mappedPresence.getType()); + assertEquals("hello", mappedPresence.getStatus()); + assertEquals(1, mappedPresence.getPriority()); + } + + @Test(expected=MessageMappingException.class) + public void testFromMessageWithPayloadPresenceTypeUnsupportedMode() throws Exception{ + + Message message = MessageBuilder.withPayload(Type.available) + .setHeader(XmppHeaders.PRESENCE_MODE, 1) + .build(); + XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); + mapper.fromMessage(message); + } + + @Test(expected=MessageMappingException.class) + public void testFromMessageWithPayloadPresenceTypeUnsupportedType() throws Exception{ + + Message message = MessageBuilder.withPayload(Type.available) + .setHeader(XmppHeaders.PRESENCE_TYPE, 1) + .build(); + XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); + mapper.fromMessage(message); + } + + @Test(expected=MessageMappingException.class) + public void testFromMessageWithUnsupportedPayload() throws Exception{ + Message message = MessageBuilder.withPayload("hello").build(); + XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); + mapper.fromMessage(message); + } +}