/** * Licensed to Apereo under one or more contributor license * agreements. See the NOTICE file distributed with this work * for additional information regarding copyright ownership. * Apereo licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a * copy of the License at the following location: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.jasig.portlet.blackboardvcportlet.dao.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Set; import java.util.concurrent.Callable; import org.jasig.portlet.blackboardvcportlet.dao.ConferenceUserDao; import org.jasig.portlet.blackboardvcportlet.dao.MultimediaDao; import org.jasig.portlet.blackboardvcportlet.dao.PresentationDao; import org.jasig.portlet.blackboardvcportlet.dao.SessionDao; import org.jasig.portlet.blackboardvcportlet.dao.UserSessionUrlDao; import org.jasig.portlet.blackboardvcportlet.data.ConferenceUser; import org.jasig.portlet.blackboardvcportlet.data.Multimedia; import org.jasig.portlet.blackboardvcportlet.data.Presentation; import org.jasig.portlet.blackboardvcportlet.data.Session; import org.jasig.portlet.blackboardvcportlet.data.UserSessionUrl; import org.joda.time.DateTime; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.support.DataAccessUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.elluminate.sas.BlackboardMultimediaResponse; import com.elluminate.sas.BlackboardPresentationResponse; import com.elluminate.sas.BlackboardSessionResponse; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:jpaTestContext.xml") public class SessionDaoImplTest extends BaseJpaDaoTest { final private long SESSION_ID = 106582; @Autowired private SessionDao sessionDao; @Autowired private ConferenceUserDao conferenceUserDao; @Autowired private MultimediaDao multimediaDao; @Autowired private PresentationDao presentationDao; @Autowired private UserSessionUrlDao userSessionUrlDao; @Test public void testEmptyQueries() throws Exception { this.execute(new Callable<Object>() { @Override public Object call() { final Session session = sessionDao.getSession(1); assertNull(session); return null; } }); this.execute(new Callable<Object>() { @Override public Object call() { final Session session = sessionDao.getSessionByBlackboardId(1); assertNull(session); return null; } }); this.execute(new Callable<Object>() { @Override public Object call() { final Session session = sessionDao.getSession(1); final Set<ConferenceUser> sessionChairs = sessionDao.getSessionChairs(session); assertNull(sessionChairs); return null; } }); this.execute(new Callable<Object>() { @Override public Object call() { final Session session = sessionDao.getSession(1); final Set<ConferenceUser> sessionNonChairs = sessionDao.getSessionNonChairs(session); assertNull(sessionNonChairs); return null; } }); } @Test public void testCreateSessionURLThenDeletingSession() { //create a session with id SESSION_ID this.execute(new Callable<Object>() { @Override public Object call() { BlackboardSessionResponse sessionResponse = generateSessionResponse(); final Session session = sessionDao.createSession(sessionResponse, "http://www.example.com/session"); assertNotNull(session); verifyCreatedSession(); verifyCreatedUsers(); final ConferenceUser user = conferenceUserDao.getUserByUniqueId("admin@example.com"); assertNotNull(user); UserSessionUrl url = userSessionUrlDao.createUserSessionUrl(session, user, "http://www.example.com/aliens"); assertNotNull(url); return null; } }); //Create url and link it to the session this.execute(new Callable<Object>() { @Override public Object call() { final Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); assertNotNull(session); sessionDao.deleteSession(session); return null; } }); } @Test public void testCreateSessionAddsCreatorAsAModeratorAKAChair() { //create a session with id SESSION_ID this.execute(new Callable<Object>() { @Override public Object call() { BlackboardSessionResponse sessionResponse = generateSessionResponse(); final Session session = sessionDao.createSession(sessionResponse, "http://www.example.com/session"); assertNotNull(session); verifyCreatedSession(); verifyCreatedUsers(); return null; } }); //Create url and link it to the session this.execute(new Callable<Object>() { @Override public Object call() { final Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); assertNotNull(session); Set<ConferenceUser> sessionChairs = sessionDao.getSessionChairs(session); assertNotNull(sessionChairs); assertEquals(2,sessionChairs.size()); assertTrue(sessionChairs.contains(session.getCreator())); return null; } }); } @Test public void testLinkMultimediaToSession() { //create a session with id sessionId this.execute(new Callable<Object>() { @Override public Object call() { BlackboardSessionResponse sessionResponse = generateSessionResponse(); final Session session = sessionDao.createSession(sessionResponse, "http://www.example.com/session"); assertNotNull(session); verifyCreatedSession(); verifyCreatedUsers(); return null; } }); //Create multimedia and link it to the session this.execute(new Callable<Object>() { @Override public Object call() { final BlackboardMultimediaResponse response = new BlackboardMultimediaResponse(); response.setCreatorId("test@example.com"); response.setDescription("super sweet media"); response.setMultimediaId(183838); response.setSize(1024); final Multimedia mm = multimediaDao.createMultimedia(response, "aliens_exist.pdf"); assertNotNull(mm); //add link final Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); sessionDao.addMultimediaToSession(session, mm); return null; } }); //Verify it exists in session lists this.execute(new Callable<Object>() { @Override public Object call() { Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); Set<Multimedia> multimedias = sessionDao.getSessionMultimedias(session); assertNotNull(multimedias); assertEquals(1,multimedias.size()); assertEquals(183838, DataAccessUtils.singleResult(multimedias).getBbMultimediaId()); return null; } }); //drop link this.execute(new Callable<Object>() { @Override public Object call() { Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); assertNotNull(session); Multimedia mm = multimediaDao.getMultimediaByBlackboardId(183838); sessionDao.deleteMultimediaFromSession(session, mm); return null; } }); //Verify the drop worked this.execute(new Callable<Object>() { @Override public Object call() { Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); Set<Multimedia> multimedias = sessionDao.getSessionMultimedias(session); assertNotNull(multimedias); assertEquals(0,multimedias.size()); return null; } }); } @Test public void testCreateSessionAndAddCreatorToTheChairListDOTShouldOnlyAddThemOnce() { //create a session with id SESSION_ID this.execute(new Callable<Object>() { @Override public Object call() { BlackboardSessionResponse sessionResponse = generateSessionResponse(); sessionResponse.setChairList(sessionResponse.getChairList() + ",admin@example.com"); final Session session = sessionDao.createSession(sessionResponse, "http://www.example.com/session"); Set<ConferenceUser> sessionChairs = sessionDao.getSessionChairs(session); assertEquals(2,sessionChairs.size()); return null; } }); } @Test public void testSessionDateStuff() { //create a session with id sessionId this.execute(new Callable<Object>() { @Override public Object call() { BlackboardSessionResponse sessionResponse = generateSessionResponse(); final Session session = sessionDao.createSession(sessionResponse, "http://www.example.com/session"); assertNotNull(session); verifyCreatedSession(); verifyCreatedUsers(); String timeUntilJoin = session.getTimeUntilJoin(); assertNotNull(timeUntilJoin); String month = session.getTimeFancyText(DateTime.now().plusMonths(3).plusDays(2),DateTime.now()); assertNotNull(month); String years = session.getTimeFancyText(DateTime.now().plusMonths(12), DateTime.now()); assertNotNull(years); return null; } }); } @Test public void testPresentationIntegration() { //create a session with id sessionId this.execute(new Callable<Object>() { @Override public Object call() { BlackboardSessionResponse sessionResponse = generateSessionResponse(); final Session session = sessionDao.createSession(sessionResponse, "http://www.example.com/session"); assertNotNull(session); verifyCreatedSession(); verifyCreatedUsers(); return null; } }); //Create presentation and link it to the session this.execute(new Callable<Object>() { @Override public Object call() { final BlackboardPresentationResponse response = new BlackboardPresentationResponse(); response.setCreatorId("test@example.com"); response.setDescription("super sweet media"); response.setPresentationId(183838); response.setSize(1024); final Presentation pres = presentationDao.createPresentation(response, "aliens_exist.pdf"); assertNotNull(pres); Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); sessionDao.addPresentationToSession(session, pres); session = sessionDao.getSessionByBlackboardId(SESSION_ID); assertNotNull(session.getPresentation()); assertEquals(session.getPresentation(),pres); sessionDao.removePresentationFromSession(session); session = sessionDao.getSessionByBlackboardId(SESSION_ID); assertNull(session.getPresentation()); return null; } }); } @Test public void testCreateUpdate() throws Exception { this.execute(new Callable<Object>() { @Override public Object call() { BlackboardSessionResponse sessionResponse = generateSessionResponse(); final Session session = sessionDao.createSession(sessionResponse, "http://www.example.com/session"); assertNotNull(session); verifyCreatedSession(); verifyCreatedUsers(); return null; } }); //Verify the session exists and the session users exist this.execute(new Callable<Object>() { @Override public Object call() { verifyCreatedSession(); return null; } }); //Verify the users are setup correctly this.execute(new Callable<Object>() { @Override public Object call() { verifyCreatedUsers(); return null; } }); this.execute(new Callable<Object>() { @Override public Object call() { final BlackboardSessionResponse sessionResponse = new BlackboardSessionResponse(); sessionResponse.setSessionId(SESSION_ID); sessionResponse.setSessionName("Test Session"); sessionResponse.setStartTime(1364566500000l); sessionResponse.setEndTime(1364567400000l); sessionResponse.setCreatorId("admin@example.com"); sessionResponse.setBoundaryTime(30); sessionResponse.setAccessType(2); sessionResponse.setRecordings(false); sessionResponse.setChairList("admin@example.com,test@example.com"); sessionResponse.setNonChairList("levett@example.com,dalquist@example.com"); sessionResponse.setOpenChair(false); sessionResponse.setPermissionsOn(true); sessionResponse.setMustBeSupervised(true); sessionResponse.setRecordingModeType(3); sessionResponse.setMaxTalkers(6); sessionResponse.setMaxCameras(6); sessionResponse.setRaiseHandOnEnter(false); sessionResponse.setReserveSeats(0); sessionResponse.setSecureSignOn(false); sessionResponse.setVersionId(111); sessionResponse.setAllowInSessionInvites(true); sessionResponse.setHideParticipantNames(true); final Session session = sessionDao.updateSession(sessionResponse); assertNotNull(session); verifyUpdatedSession(); verifyUpdatedUsers(); return null; } }); //Verify the session exists and the session users exist this.execute(new Callable<Object>() { @Override public Object call() { verifyUpdatedSession(); return null; } }); //Verify the users are setup correctly this.execute(new Callable<Object>() { @Override public Object call() { verifyUpdatedUsers(); return null; } }); } private void verifyUpdatedSession() { final Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); assertNotNull(session); assertEquals(SESSION_ID, session.getBbSessionId()); final Set<ConferenceUser> sessionChairs = sessionDao.getSessionChairs(session); assertNotNull(sessionChairs); assertEquals(2, sessionChairs.size()); final Set<ConferenceUser> sessionNonChairs = sessionDao.getSessionNonChairs(session); assertNotNull(sessionNonChairs); assertEquals(2, sessionNonChairs.size()); } private void verifyUpdatedUsers() { final ConferenceUser admin = conferenceUserDao.getUserByUniqueId("admin@example.com"); final Set<Session> adminChaired = conferenceUserDao.getChairedSessionsForUser(admin); assertNotNull(adminChaired); assertEquals(1, adminChaired.size()); final Set<Session> adminNonChaired = conferenceUserDao.getNonChairedSessionsForUser(admin); assertNotNull(adminNonChaired); assertEquals(0, adminNonChaired.size()); final ConferenceUser dalquist = conferenceUserDao.getUserByUniqueId("dalquist@example.com"); final Set<Session> dalquistChaired = conferenceUserDao.getChairedSessionsForUser(dalquist); assertNotNull(dalquistChaired); assertEquals(0, dalquistChaired.size()); final Set<Session> dalquistNonChaired = conferenceUserDao.getNonChairedSessionsForUser(dalquist); assertNotNull(dalquistNonChaired); assertEquals(1, dalquistNonChaired.size()); final ConferenceUser levett = conferenceUserDao.getUserByUniqueId("levett@example.com"); final Set<Session> levettChaired = conferenceUserDao.getChairedSessionsForUser(levett); assertNotNull(levettChaired); assertEquals(0, levettChaired.size()); final Set<Session> levettNonChaired = conferenceUserDao.getNonChairedSessionsForUser(levett); assertNotNull(levettNonChaired); assertEquals(1, levettNonChaired.size()); } private void verifyCreatedUsers() { final ConferenceUser admin = conferenceUserDao.getUserByUniqueId("admin@example.com"); final Set<Session> adminChaired = conferenceUserDao.getChairedSessionsForUser(admin); assertNotNull(adminChaired); assertEquals(1, adminChaired.size()); final Set<Session> adminNonChaired = conferenceUserDao.getNonChairedSessionsForUser(admin); assertNotNull(adminNonChaired); assertEquals(0, adminNonChaired.size()); final ConferenceUser dalquist = conferenceUserDao.getUserByUniqueId("dalquist@example.com"); final Set<Session> dalquistChaired = conferenceUserDao.getChairedSessionsForUser(dalquist); assertNotNull(dalquistChaired); assertEquals(1, dalquistChaired.size()); final Set<Session> dalquistNonChaired = conferenceUserDao.getNonChairedSessionsForUser(dalquist); assertNotNull(dalquistNonChaired); assertEquals(0, dalquistNonChaired.size()); final ConferenceUser levett = conferenceUserDao.getUserByUniqueId("levett@example.com"); final Set<Session> levettChaired = conferenceUserDao.getChairedSessionsForUser(levett); assertNotNull(levettChaired); assertEquals(0, levettChaired.size()); final Set<Session> levettNonChaired = conferenceUserDao.getNonChairedSessionsForUser(levett); assertNotNull(levettNonChaired); assertEquals(1, levettNonChaired.size()); } private void verifyCreatedSession() { final Session session = sessionDao.getSessionByBlackboardId(SESSION_ID); assertNotNull(session); assertEquals(SESSION_ID, session.getBbSessionId()); final Set<ConferenceUser> sessionChairs = sessionDao.getSessionChairs(session); assertNotNull(sessionChairs); assertEquals(2, sessionChairs.size()); final Set<ConferenceUser> sessionNonChairs = sessionDao.getSessionNonChairs(session); assertNotNull(sessionNonChairs); assertEquals(1, sessionNonChairs.size()); } private BlackboardSessionResponse generateSessionResponse() { final BlackboardSessionResponse sessionResponse = new BlackboardSessionResponse(); sessionResponse.setSessionId(SESSION_ID); sessionResponse.setSessionName("Test Session"); sessionResponse.setStartTime(DateTime.now().plusHours(10).getMillis()); sessionResponse.setEndTime(DateTime.now().plusHours(11).getMillis()); sessionResponse.setCreatorId("admin@example.com"); sessionResponse.setBoundaryTime(30); sessionResponse.setAccessType(2); sessionResponse.setRecordings(false); sessionResponse.setChairList("admin@example.com,dalquist@example.com"); sessionResponse.setNonChairList("levett@example.com"); sessionResponse.setOpenChair(false); sessionResponse.setPermissionsOn(true); sessionResponse.setMustBeSupervised(true); sessionResponse.setRecordingModeType(3); sessionResponse.setMaxTalkers(6); sessionResponse.setMaxCameras(6); sessionResponse.setRaiseHandOnEnter(false); sessionResponse.setReserveSeats(0); sessionResponse.setSecureSignOn(false); sessionResponse.setVersionId(111); sessionResponse.setAllowInSessionInvites(true); sessionResponse.setHideParticipantNames(true); return sessionResponse; } }