/*
* PatientView
*
* Copyright (c) Worth Solutions Limited 2004-2013
*
* This file is part of PatientView.
*
* PatientView is free software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
* PatientView is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with PatientView in a file
* titled COPYING. If not, see <http://www.gnu.org/licenses/>.
*
* @package PatientView
* @link http://www.patientview.org
* @author PatientView <info@patientview.org>
* @copyright Copyright (c) 2004-2013, Worth Solutions Limited
* @license http://www.gnu.org/licenses/gpl-3.0.html The GNU General Public License V3.0
*/
package org.patientview.test.repository.messaging;
import org.patientview.patientview.model.Conversation;
import org.patientview.patientview.model.Message;
import org.patientview.patientview.model.User;
import org.patientview.repository.messaging.MessageDao;
import org.patientview.test.helpers.RepositoryHelpers;
import org.patientview.test.repository.BaseDaoTest;
import org.joda.time.DateTime;
import org.junit.Test;
import javax.inject.Inject;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class MessageDaoTest extends BaseDaoTest {
@Inject
private RepositoryHelpers repositoryHelpers;
@Inject
private MessageDao messageDao;
@Test
public void testAddGetMessage() throws Exception {
User user1 = repositoryHelpers.createUser("test 1", "tester1@test.com", "test1", "Test 1");
User user2 = repositoryHelpers.createUser("test 2", "tester2@test.com", "test2", "Test 2");
Conversation conversation = repositoryHelpers.createConversation("Test subject", user1, user2, true);
Message message = repositoryHelpers.createMessage(conversation, user1, user2, "This is a message", true);
assertTrue("Invalid id for message", message.getId() > 0);
Message checkMessage = messageDao.get(message.getId());
assertNotNull(checkMessage);
assertEquals("Conversation not stored", checkMessage.getConversation(), message.getConversation());
assertEquals("Description not stored", checkMessage.getContent(), message.getContent());
}
@Test
public void testDeleteMessage() throws Exception {
User user1 = repositoryHelpers.createUser("test 1", "tester1@test.com", "test1", "Test 1");
User user2 = repositoryHelpers.createUser("test 2", "tester2@test.com", "test2", "Test 2");
Conversation conversation = repositoryHelpers.createConversation("Test subject", user1, user2, true);
Message message = repositoryHelpers.createMessage(conversation, user1, user2, "This is a message", true);
// now delete and try to pull back
messageDao.delete(message);
Message checkMessage = messageDao.get(message.getId());
assertNull("Message was found after being deleted", checkMessage);
}
@Test
public void testGetMessages() throws Exception {
/**
* Create 3 users
*
* Then start a conversastion between user 1 and user 2 and another between user 1 and user 3
*
* Send a message in each conversation
*
* Should get back 2 message for conversation 1
*
* Should get back 1 message for conversation 2
*/
User user1 = repositoryHelpers.createUser("test 1", "tester1@test.com", "test1", "Test 1");
User user2 = repositoryHelpers.createUser("test 2", "tester2@test.com", "test2", "Test 2");
User user3 = repositoryHelpers.createUser("test 3", "tester3@test.com", "test3", "Test 3");
// create convo between 1 and 2
Conversation conversation1 = repositoryHelpers.createConversation("Test subject", user1, user2, true);
Message message1 = repositoryHelpers.createMessage(conversation1, user1, user2, "Message in conversation 1",
true);
Message message2 = repositoryHelpers.createMessage(conversation1, user1, user2, "2nd Message in conversation 1",
true);
// create convo between 2 and 3
Conversation conversation2 = repositoryHelpers.createConversation("Test subject", user1, user3, true);
Message message3 = repositoryHelpers.createMessage(conversation2, user1, user3, "Message in conversation 2",
true);
// pull back messages for converastion 1 - should get back 2 not including message 3
List<Message> checkMessagesConversation1 = messageDao.getMessages(conversation1.getId());
assertEquals("Wrong number of message for conversation 1", checkMessagesConversation1.size(), 2);
assertFalse("Message 3 found in conversastion 1", checkMessagesConversation1.contains(message3));
// pull back messages for converastion 2 - should get back 1 not including message 1 & 2
List<Message> checkMessagesConversation2 = messageDao.getMessages(conversation2.getId());
assertEquals("Wrong number of message for conversation 2", checkMessagesConversation2.size(), 1);
assertFalse("Message 1 found in conversastion 2", checkMessagesConversation2.contains(message1));
assertFalse("Message 2 found in conversastion 2", checkMessagesConversation2.contains(message2));
}
@Test
public void testGetNumberOfUnreadMessages() throws Exception {
/**
* 2 users in a convo
*
* User 1 sends 2 messages to user 2
*
* User 2 sends 1 message to user 1
*
* User 1 should have 1 unread messages for that conversation
*
* User 2 should have 2 unread messages for that conversation
*/
User user1 = repositoryHelpers.createUser("test 1", "tester1@test.com", "test1", "Test 1");
User user2 = repositoryHelpers.createUser("test 2", "tester2@test.com", "test2", "Test 2");
// create convo between 1 and 2
Conversation conversation = repositoryHelpers.createConversation("Test subject", user1, user2, true);
// 2 messages from user 1
repositoryHelpers.createMessage(conversation, user1, user2, "Message in conversation 1", true);
repositoryHelpers.createMessage(conversation, user1, user2, "2nd Message in conversation 1", true);
// 1 messages from user 2
repositoryHelpers.createMessage(conversation, user2, user1, "3rd Message in conversation 1", true);
// now check how many unread messages for each user in convo 1
Long checkUser1UnreadMessages = messageDao.getNumberOfUnreadMessages(user1.getId(), conversation.getId());
assertNotNull("Number of messages unread was null", checkUser1UnreadMessages);
assertTrue("Wrong number of unread messages for user 1", checkUser1UnreadMessages == 1L);
Long checkUser2UnreadMessages = messageDao.getNumberOfUnreadMessages(user2.getId(), conversation.getId());
assertNotNull("Number of messages unread was null", checkUser2UnreadMessages);
assertTrue("Wrong number of unread messages for user 2", checkUser2UnreadMessages == 2L);
}
@Test
public void testGetUnreadMessages() throws Exception {
/**
* 2 users in a convo
*
* User 1 sends 2 messages to user 2
*
* User 2 sends 1 message to user 1
*
* User 1 should have 1 unread messages for that conversation
*
* User 2 should have 2 unread messages for that conversation
*/
User user1 = repositoryHelpers.createUser("test 1", "tester1@test.com", "test1", "Test 1");
User user2 = repositoryHelpers.createUser("test 2", "tester2@test.com", "test2", "Test 2");
// create convo between 1 and 2
Conversation conversation = repositoryHelpers.createConversation("Test subject", user1, user2, true);
// 2 messages from user 1
repositoryHelpers.createMessage(conversation, user1, user2, "Message in conversation 1", true);
repositoryHelpers.createMessage(conversation, user1, user2, "2nd Message in conversation 1", true);
// 1 messages from user 2
repositoryHelpers.createMessage(conversation, user2, user1, "3rd Message in conversation 1", true);
// now check how many unread messages for each user in convo 1
List<Message> checkUser1UnreadMessages = messageDao.getUnreadMessages(user1.getId(), conversation.getId());
assertNotNull("Number of messages unread was null", checkUser1UnreadMessages);
assertTrue("Wrong number of unread messages for user 1", checkUser1UnreadMessages.size() == 1L);
List<Message> checkUser2UnreadMessages = messageDao.getUnreadMessages(user2.getId(), conversation.getId());
assertNotNull("Number of messages unread was null", checkUser2UnreadMessages);
assertTrue("Wrong number of unread messages for user 2", checkUser2UnreadMessages.size() == 2L);
}
@Test
public void testGetLatestMessage() throws Exception {
User user1 = repositoryHelpers.createUser("test 1", "tester1@test.com", "test1", "Test 1");
User user2 = repositoryHelpers.createUser("test 2", "tester2@test.com", "test2", "Test 2");
// create convo between 1 and 2
Conversation conversation = repositoryHelpers.createConversation("Test subject", user1, user2, true);
// 2 messages from user 1
Message message1 = repositoryHelpers.createMessage(conversation, user1, user2, "Message in conversation 1",
true);
// this is a bit of a hack but cause the test messages are created at almost the same time MySQL doesnt take
// into account the milliseconds so save the 2nd message then save again to make the time slightly different
Message message2 = repositoryHelpers.createMessage(conversation, user1, user2, "2nd Message in conversation 1",
true);
message2.setDate(new DateTime(message2.getDate()).plusMinutes(1).toDate());
messageDao.save(message2);
Message checkMessage = messageDao.getLatestMessage(conversation.getId());
assertEquals("Wrong message pull back as latest", checkMessage, message2);
}
}