/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.commons.info;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.olat.commons.info.manager.InfoMessageManager;
import org.olat.commons.info.model.InfoMessage;
import org.olat.core.commons.persistence.DB;
import org.olat.core.id.Identity;
import org.olat.core.id.OLATResourceable;
import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupService;
import org.olat.repository.RepositoryEntry;
import org.olat.test.JunitTestHelper;
import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Description:<br>
* Unit tests for the InfoMessageManager. It's integration, it need
* the DB to test the schema, the queries...
*
* <P>
* Initial Date: 26 jul. 2010 <br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
public class InfoManagerTest extends OlatTestCase {
private static Identity id1;
@Autowired
private DB dbInstance;
@Autowired
private InfoMessageManager infoMessageManager;
@Autowired
private BusinessGroupService groupService;
/**
* Set up a course with learn group and group area
* @see org.olat.test.OlatJerseyTestCase#setUp()
*/
@Before
public void setUp() throws Exception {
if(id1 == null) {
id1 = JunitTestHelper.createAndPersistIdentityAsUser("info-msg-1");
JunitTestHelper.createAndPersistIdentityAsUser("info-msg-2");
}
}
@Test
public void testManagers() {
assertNotNull(infoMessageManager);
}
@Test
public void testSaveInfoMessage() {
final InfoOLATResourceable ores = new InfoOLATResourceable(5l, "InfoTests");
final String subPath = UUID.randomUUID().toString();
final String businessPath = "[test:la]";
InfoMessage msg = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg);
msg.setTitle("Title");
msg.setMessage("Message");
infoMessageManager.saveInfoMessage(msg);
dbInstance.commitAndCloseSession();
assertNotNull(msg.getKey());
InfoMessage retrievedMsg = infoMessageManager.loadInfoMessageByKey(msg.getKey());
assertNotNull(retrievedMsg);
assertEquals("Title", retrievedMsg.getTitle());
assertEquals("Message", retrievedMsg.getMessage());
assertEquals(subPath, retrievedMsg.getResSubPath());
assertEquals(businessPath, retrievedMsg.getBusinessPath());
assertNotNull(retrievedMsg.getOLATResourceable());
assertEquals(ores.getResourceableId(), retrievedMsg.getResId());
assertEquals(ores.getResourceableTypeName(), retrievedMsg.getResName());
assertNotNull(retrievedMsg.getAuthor());
assertEquals(id1.getKey(), retrievedMsg.getAuthor().getKey());
}
@Test
public void testLoadByResource() {
final String resName = UUID.randomUUID().toString();
final InfoOLATResourceable ores = new InfoOLATResourceable(5l, resName);
InfoMessage msg = infoMessageManager.createInfoMessage(ores, null, null, id1);
assertNotNull(msg);
infoMessageManager.saveInfoMessage(msg);
dbInstance.commitAndCloseSession();
List<InfoMessage> retrievedMsg = infoMessageManager.loadInfoMessageByResource(ores, null, null, null, null, 0, 0);
assertNotNull(retrievedMsg);
assertEquals(1, retrievedMsg.size());
assertEquals(msg.getKey(), retrievedMsg.get(0).getKey());
}
@Test
public void loadInfoMessagesOfIdentity() {
Identity id5 = JunitTestHelper.createAndPersistIdentityAsRndUser("info-1");
Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("info-2");
Identity id3 = JunitTestHelper.createAndPersistIdentityAsRndUser("info-3");
Identity id4 = JunitTestHelper.createAndPersistIdentityAsRndUser("info-4");
RepositoryEntry resource1 = JunitTestHelper.createAndPersistRepositoryEntry();
BusinessGroup group1 = groupService.createBusinessGroup(null, "gdao1", "gdao1-desc", -1, -1, false, false, resource1);
final OLATResourceable ores1 = new OLATResourceable() {
@Override
public String getResourceableTypeName() {
return group1.getResourceableTypeName();
}
@Override
public Long getResourceableId() {
return group1.getResourceableId();
}
};
RepositoryEntry resource2 = JunitTestHelper.createAndPersistRepositoryEntry();
BusinessGroup group2 = groupService.createBusinessGroup(null, "gdao2", "gdao2-desc", -1, -1, false, false, resource2);
final OLATResourceable ores2 = new OLATResourceable() {
@Override
public String getResourceableTypeName() {
return group2.getResourceableTypeName();
}
@Override
public Long getResourceableId() {
return group2.getResourceableId();
}
};
InfoMessage msg1 = infoMessageManager.createInfoMessage(ores2, null, null, id5);
msg1.setTitle("title-1");
msg1.setMessage("message-1");
assertNotNull(msg1);
infoMessageManager.saveInfoMessage(msg1);
InfoMessage msg2 = infoMessageManager.createInfoMessage(ores2, null, null, id2);
msg2.setTitle("title-1");
msg2.setMessage("message-1");
assertNotNull(msg2);
infoMessageManager.saveInfoMessage(msg2);
InfoMessage msg3 = infoMessageManager.createInfoMessage(ores1, null, null, id3);
msg3.setTitle("title-1");
msg3.setMessage("message-1");
assertNotNull(msg3);
infoMessageManager.saveInfoMessage(msg3);
InfoMessage msg4 = infoMessageManager.createInfoMessage(ores1, null, null, id5);
msg4.setTitle("title-1");
msg4.setMessage("message-1");
assertNotNull(msg4);
infoMessageManager.saveInfoMessage(msg4);
InfoMessage msg5 = infoMessageManager.createInfoMessage(ores2, null, null, id5);
msg5.setTitle("title-1");
msg5.setMessage("message-1");
assertNotNull(msg5);
infoMessageManager.saveInfoMessage(msg5);
InfoMessage msg6 = infoMessageManager.createInfoMessage(ores2, null, null, id4);
msg6.setTitle("title-1");
msg6.setMessage("message-1");
assertNotNull(msg6);
infoMessageManager.saveInfoMessage(msg6);
List<InfoMessage> infoMessages = infoMessageManager.loadInfoMessagesOfIdentity(group2, id5);
Assert.assertNotNull(infoMessages);
dbInstance.commitAndCloseSession();
Assert.assertEquals(2, infoMessages.size());
Assert.assertTrue(infoMessages.contains(msg1));
Assert.assertFalse(infoMessages.contains(msg2));
Assert.assertFalse(infoMessages.contains(msg3));
Assert.assertFalse(infoMessages.contains(msg4));
Assert.assertTrue(infoMessages.contains(msg5));
Assert.assertFalse(infoMessages.contains(msg6));
}
@Test
public void testLoadByResource2() {
final String resName = UUID.randomUUID().toString();
final String subPath = UUID.randomUUID().toString();
final String businessPath = UUID.randomUUID().toString();
final InfoOLATResourceable ores = new InfoOLATResourceable(5l, resName);
InfoMessage msg = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg);
infoMessageManager.saveInfoMessage(msg);
dbInstance.commitAndCloseSession();
List<InfoMessage> retrievedMsg = infoMessageManager.loadInfoMessageByResource(ores, subPath, businessPath, null, null, 0, 0);
assertNotNull(retrievedMsg);
assertEquals(1, retrievedMsg.size());
assertEquals(msg.getKey(), retrievedMsg.get(0).getKey());
}
@Test
public void testDelete() {
//create some messages
final String resName = UUID.randomUUID().toString();
final String subPath = UUID.randomUUID().toString();
final String businessPath = UUID.randomUUID().toString();
final InfoOLATResourceable ores = new InfoOLATResourceable(6l, resName);
InfoMessage msg1 = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg1);
infoMessageManager.saveInfoMessage(msg1);
InfoMessage msg2 = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg2);
infoMessageManager.saveInfoMessage(msg2);
InfoMessage msg3 = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg3);
infoMessageManager.saveInfoMessage(msg3);
dbInstance.commitAndCloseSession();
//delete a message
infoMessageManager.deleteInfoMessage(msg2);
dbInstance.commitAndCloseSession();
//make the tests
InfoMessage deletedInfo = infoMessageManager.loadInfoMessageByKey(msg2.getKey());
assertNull(deletedInfo);
List<InfoMessage> infos = infoMessageManager.loadInfoMessageByResource(ores, subPath, businessPath, null, null, 0, -1);
assertNotNull(infos);
assertEquals(2, infos.size());
}
@Test
public void testCount() {
final String resName = UUID.randomUUID().toString();
final String subPath = UUID.randomUUID().toString();
final String businessPath = UUID.randomUUID().toString();
final InfoOLATResourceable ores = new InfoOLATResourceable(7l, resName);
InfoMessage msg1 = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg1);
infoMessageManager.saveInfoMessage(msg1);
Calendar cal = Calendar.getInstance();
cal.setTime(msg1.getCreationDate());
cal.add(Calendar.SECOND, -1);
Date after = cal.getTime();
InfoMessage msg2 = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg2);
infoMessageManager.saveInfoMessage(msg2);
InfoMessage msg3 = infoMessageManager.createInfoMessage(ores, subPath, businessPath, id1);
assertNotNull(msg3);
infoMessageManager.saveInfoMessage(msg3);
cal.setTime(msg3.getCreationDate());
cal.add(Calendar.SECOND, +1);
Date before = cal.getTime();
dbInstance.commitAndCloseSession();
int count1 = infoMessageManager.countInfoMessageByResource(ores, null, null, null, null);
assertEquals(3, count1);
int count2 = infoMessageManager.countInfoMessageByResource(ores, subPath, null, null, null);
assertEquals(3, count2);
int count3 = infoMessageManager.countInfoMessageByResource(ores, subPath, businessPath, null, null);
assertEquals(3, count3);
int count4 = infoMessageManager.countInfoMessageByResource(ores, subPath, businessPath, after, null);
assertEquals(3, count4);
int count5 = infoMessageManager.countInfoMessageByResource(ores, subPath, businessPath, after, before);
assertEquals(3, count5);
}
private class InfoOLATResourceable implements OLATResourceable {
private final Long resId;
private final String resName;
public InfoOLATResourceable(Long resId, String resName) {
this.resId = resId;
this.resName = resName;
}
@Override
public String getResourceableTypeName() {
return resName;
}
@Override
public Long getResourceableId() {
return resId;
}
}
}