// $HeadURL$
// $Id$
//
// Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College.
//
// Screensaver is an open-source project developed by the ICCB-L and NSRB labs
// at Harvard Medical School. This software is distributed under the terms of
// the GNU General Public License.
package edu.harvard.med.screensaver.ui.screens;
import java.io.IOException;
import com.google.common.collect.Iterables;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import edu.harvard.med.screensaver.ScreensaverConstants;
import edu.harvard.med.screensaver.model.AttachedFile;
import edu.harvard.med.screensaver.model.AttachedFileType;
import edu.harvard.med.screensaver.model.activities.Activity;
import edu.harvard.med.screensaver.model.screens.LibraryScreening;
import edu.harvard.med.screensaver.model.screens.ProjectPhase;
import edu.harvard.med.screensaver.model.screens.Screen;
import edu.harvard.med.screensaver.model.screens.ScreenAttachedFileType;
import edu.harvard.med.screensaver.model.screens.ScreenType;
import edu.harvard.med.screensaver.model.screens.ScreenStatus;
import edu.harvard.med.screensaver.model.users.AdministratorUser;
import edu.harvard.med.screensaver.model.users.LabHead;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUser;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUserClassification;
import edu.harvard.med.screensaver.model.users.ScreensaverUserRole;
import edu.harvard.med.screensaver.service.screens.ScreenGenerator;
import edu.harvard.med.screensaver.ui.activities.ActivityViewer;
import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBeanTest;
public class ScreenViewerTest extends AbstractBackingBeanTest
{
private static Logger log = Logger.getLogger(ScreenViewerTest.class);
@Autowired
protected ScreenViewer screenViewer;
@Autowired
protected ScreenDetailViewer screenDetailViewer;
@Autowired
protected ScreenGenerator screenGenerator;
@Autowired
protected ActivityViewer activityViewer;
private Screen _screen;
private ScreeningRoomUser _screener;
private LabHead _labHead;
private AttachedFileType _genericAttachedFileType;
@Override
protected void setUp() throws Exception
{
super.setUp();
genericEntityDao.persistEntity(new ScreenAttachedFileType("Publication"));
_genericAttachedFileType = genericEntityDao.mergeEntity(new ScreenAttachedFileType("Generic"));
_screener = new ScreeningRoomUser(_admin);
_screener.setFirstName("A");
_screener.setLastName("B");
_screener.setUserClassification(ScreeningRoomUserClassification.UNASSIGNED);
_labHead = new LabHead(_admin);
_labHead.setFirstName("X");
_labHead.setLastName("Z");
_screener = genericEntityDao.mergeEntity(_screener);
_labHead = genericEntityDao.mergeEntity(_labHead);
_screen = screenGenerator.createPrimaryScreen(_admin, null, ScreenType.SMALL_MOLECULE);
}
public void testNewScreen()
{
doNewScreen();
}
public void testAddRelatedScreen()
{
_screen.setProjectId("project1");
doNewScreen();
assertEquals(ScreensaverConstants.EDIT_SCREEN, screenDetailViewer.addRelatedScreen());
screenDetailViewer.getEntity().setFacilityId("screen2");
screenDetailViewer.getEntity().setProjectPhase(ProjectPhase.FOLLOW_UP_SCREEN);
assertEquals(ScreensaverConstants.VIEW_SCREEN, screenDetailViewer.save());
assertEquals("screen2", screenViewer.getEntity().getFacilityId());
assertEquals(ScreenType.SMALL_MOLECULE, screenViewer.getEntity().getScreenType());
assertEquals(_labHead, screenViewer.getEntity().getLabHead());
assertEquals(_screener, screenViewer.getEntity().getLeadScreener());
assertEquals(_screen.getTitle(), screenViewer.getEntity().getTitle());
assertEquals("project1", screenViewer.getEntity().getProjectId());
assertEquals(ProjectPhase.FOLLOW_UP_SCREEN, screenViewer.getEntity().getProjectPhase());
}
public void testAddLibraryScreening()
{
_admin = new AdministratorUser("Admin2", "User");
_admin.addScreensaverUserRole(ScreensaverUserRole.SCREENS_ADMIN);
_admin = genericEntityDao.mergeEntity(_admin);
currentScreensaverUser.setScreensaverUser(_admin);
doNewScreen();
assertEquals(ScreensaverConstants.VIEW_ACTIVITY, screenDetailViewer.addLibraryScreening());
// note: we're not going to test the LabActivityViewer in-depth here, since we're just trying to test the addLibraryScreening operation
activityViewer.getEntity().setDateOfActivity(new LocalDate(2011, 2, 8));
assertEquals(ScreensaverConstants.BROWSE_SCREENS, activityViewer.save());
assertEquals(1, screenViewer.getEntity().getLabActivitiesOfType(LibraryScreening.class).size());
}
public void testAddDeleteStatusItems()
{
doNewScreen();
assertEquals(ScreensaverConstants.EDIT_SCREEN, screenDetailViewer.edit());
screenDetailViewer.setNewStatusItemDate(new LocalDate(2011, 1, 1));
screenDetailViewer.getNewStatusItemValue().setSelection(ScreenStatus.ACCEPTED);
screenDetailViewer.addStatusItem();
assertEquals(ScreensaverConstants.BROWSE_SCREENS, screenDetailViewer.save());
_screen = genericEntityDao.reloadEntity(_screen, true, Screen.statusItems);
assertEquals(ScreenStatus.ACCEPTED, _screen.getStatusItems().first().getStatus());
assertEquals(ScreensaverConstants.EDIT_SCREEN, screenDetailViewer.edit());
screenDetailViewer.getEntity().getStatusItems().remove(_screen.getStatusItems().first());
assertEquals(ScreensaverConstants.BROWSE_SCREENS, screenDetailViewer.save());
_screen = genericEntityDao.reloadEntity(_screen, true, Screen.statusItems);
assertTrue(_screen.getStatusItems().isEmpty());
}
public void testAddDeleteAttachedFile() throws IOException
{
doNewScreen();
assertEquals(ScreensaverConstants.EDIT_SCREEN, screenDetailViewer.edit());
screenDetailViewer.getAttachedFiles().setNewAttachedFileName("data.txt");
screenDetailViewer.getAttachedFiles().setNewAttachedFileContents("data, data");
screenDetailViewer.getAttachedFiles().getNewAttachedFileType().setSelection(_genericAttachedFileType);
screenDetailViewer.getAttachedFiles().addAttachedFile();
assertEquals(ScreensaverConstants.BROWSE_SCREENS, screenDetailViewer.save());
_screen = genericEntityDao.reloadEntity(_screen, true, Screen.attachedFiles.to(AttachedFile.fileType));
AttachedFile attachedFile = Iterables.get(_screen.getAttachedFiles(), 0);
assertEquals("data.txt", attachedFile.getFilename());
assertEquals("data, data", IOUtils.toString(attachedFile.getFileContents()));
assertEquals("Generic", attachedFile.getFileType().getValue());
assertEquals(ScreensaverConstants.EDIT_SCREEN, screenDetailViewer.edit());
AttachedFile attachedFile2 = Iterables.get(screenDetailViewer.getEntity().getAttachedFiles(), 0);
screenDetailViewer.getEntity().removeAttachedFile(attachedFile2);
assertEquals(ScreensaverConstants.BROWSE_SCREENS, screenDetailViewer.save());
_screen = genericEntityDao.reloadEntity(_screen, true, Screen.attachedFiles);
assertTrue(_screen.getAttachedFiles().isEmpty());
}
private void doNewScreen()
{
assertEquals(ScreensaverConstants.EDIT_SCREEN, screenDetailViewer.editNewEntity(_screen));
screenDetailViewer.getEntity().setFacilityId("screen1");
screenDetailViewer.getEntity().setTitle("title");
screenDetailViewer.getLabName().setSelection(_labHead);
screenDetailViewer.getLeadScreener().setSelection(_screener);
assertEquals(ScreensaverConstants.BROWSE_SCREENS, screenDetailViewer.save());
_screen = genericEntityDao.findEntityByProperty(Screen.class, "facilityId", "screen1");
assertNotNull(_screen);
}
}