org.jasig.portlet.blackboardvcportlet.dao.impl.SessionDaoImplTest.java Source code

Java tutorial

Introduction

Here is the source code for org.jasig.portlet.blackboardvcportlet.dao.impl.SessionDaoImplTest.java

Source

/**
 * 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;
    }
}