package org.jivesoftware.openfire;
import org.junit.Test;
import org.xmpp.packet.Message;
import org.xmpp.packet.PacketExtension;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* This tests the business rules for storing messages as described in <a href="http://xmpp.org/extensions/xep-0160.html#types">3. Handling of Message Types</a>.
*
* @author csh
*/
public class OfflineMessageStoreTest {
@Test
public void shouldNotStoreGroupChatMessages() {
// XEP-0160: "groupchat" message types SHOULD NOT be stored offline
Message message = new Message();
message.setType(Message.Type.groupchat);
assertFalse(OfflineMessageStore.shouldStoreMessage(message));
}
@Test
public void shouldNotStoreHeadlineMessages() {
// XEP-0160: "headline" message types SHOULD NOT be stored offline
Message message = new Message();
message.setType(Message.Type.headline);
assertFalse(OfflineMessageStore.shouldStoreMessage(message));
}
@Test
public void shouldNotStoreErrorMessages() {
// XEP-0160: "error" message types SHOULD NOT be stored offline,
Message message = new Message();
message.setType(Message.Type.error);
assertFalse(OfflineMessageStore.shouldStoreMessage(message));
}
@Test
public void shouldStoreNormalMessages() {
// XEP-0160: Messages with a 'type' attribute whose value is "normal" (or messages with no 'type' attribute) SHOULD be stored offline.
Message message = new Message();
message.setType(Message.Type.normal);
assertTrue(OfflineMessageStore.shouldStoreMessage(message));
Message message2 = new Message();
assertTrue(OfflineMessageStore.shouldStoreMessage(message2));
}
@Test
public void shouldNotStoreEmptyChatMessages() {
// XEP-0160: "chat" message types SHOULD be stored offline unless they only contain chat state notifications
Message message = new Message();
message.setType(Message.Type.chat);
assertFalse(OfflineMessageStore.shouldStoreMessage(message));
}
@Test
public void shouldStoreNonEmptyChatMessages() {
// XEP-0160: "chat" message types SHOULD be stored offline unless they only contain chat state notifications
Message message = new Message();
message.setType(Message.Type.chat);
message.setBody(" ");
assertTrue(OfflineMessageStore.shouldStoreMessage(message));
}
@Test
public void shouldNotStoreEmptyChatMessagesWithOnlyChatStates() {
Message message = new Message();
message.setType(Message.Type.chat);
PacketExtension chatState = new PacketExtension("composing", "http://jabber.org/protocol/chatstates");
message.addExtension(chatState);
assertFalse(OfflineMessageStore.shouldStoreMessage(message));
}
@Test
public void shouldNotStoreEmptyChatMessagesWithOnlyChatStatesAndThread() {
Message message = new Message();
message.setType(Message.Type.chat);
message.setThread("1234");
PacketExtension chatState = new PacketExtension("composing", "http://jabber.org/protocol/chatstates");
message.addExtension(chatState);
assertFalse(OfflineMessageStore.shouldStoreMessage(message));
}
@Test
public void shouldStoreEmptyChatMessagesWithOtherExtensions() {
Message message = new Message();
message.setType(Message.Type.chat);
PacketExtension chatState = new PacketExtension("composing", "http://jabber.org/protocol/chatstates");
message.addExtension(chatState);
PacketExtension packetExtension2 = new PacketExtension("received", "urn:xmpp:receipts");
message.addExtension(packetExtension2);
assertTrue(OfflineMessageStore.shouldStoreMessage(message));
}
}