// $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.activities; import java.util.List; import javax.faces.model.SelectItem; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; 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.db.EntityInflator; import edu.harvard.med.screensaver.model.activities.Activity; import edu.harvard.med.screensaver.model.activities.ServiceActivity; import edu.harvard.med.screensaver.model.activities.ServiceActivityType; import edu.harvard.med.screensaver.model.libraries.CopyUsageType; import edu.harvard.med.screensaver.model.libraries.Library; import edu.harvard.med.screensaver.model.screenresults.AssayPlate; import edu.harvard.med.screensaver.model.screens.LibraryScreening; import edu.harvard.med.screensaver.model.screens.Screen; import edu.harvard.med.screensaver.model.screens.ScreenType; 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.arch.searchresults.EntitySearchResults; import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBeanTest; import edu.harvard.med.screensaver.ui.screens.ScreenDetailViewer; import edu.harvard.med.screensaver.ui.screens.ScreenViewer; import edu.harvard.med.screensaver.ui.users.UserViewer; public class ActivityViewerTest extends AbstractBackingBeanTest { private static Logger log = Logger.getLogger(ActivityViewerTest.class); @Autowired protected ScreenViewer screenViewer; @Autowired protected ScreenDetailViewer screenDetailViewer; @Autowired protected ScreenGenerator screenGenerator; @Autowired protected ActivityViewer activityViewer; @Autowired protected UserViewer userViewer; private Screen _screen; private ScreeningRoomUser _screener; private LabHead _labHead; private LibraryScreening _libraryScreening; private Library _library1; private Library _library2; @Override protected void setUp() throws Exception { super.setUp(); // for testServiceActivity _admin.addScreensaverUserRole(ScreensaverUserRole.SERVICE_ACTIVITY_ADMIN); _admin = genericEntityDao.mergeEntity(_admin); currentScreensaverUser.setScreensaverUser(_admin); _screener = new ScreeningRoomUser(_admin); _screener.setFirstName("A"); _screener.setLastName("B"); _screener.setUserClassification(ScreeningRoomUserClassification.UNASSIGNED); _screener = genericEntityDao.mergeEntity(_screener); _library1 = dataFactory.newInstance(Library.class); _library1.setStartPlate(1); _library1.setEndPlate(2); _library1.createCopy(_admin, CopyUsageType.LIBRARY_SCREENING_PLATES, "A"); _library1 = genericEntityDao.mergeEntity(_library1); _library2 = dataFactory.newInstance(Library.class); _library2.setStartPlate(3); _library2.setEndPlate(4); _library2.createCopy(_admin, CopyUsageType.LIBRARY_SCREENING_PLATES, "A"); _library2 = genericEntityDao.mergeEntity(_library2); _screen = screenGenerator.createPrimaryScreen(_admin, null, ScreenType.SMALL_MOLECULE); _screen.setFacilityId("1"); _screen.setTitle("screen"); _screen.setLeadScreener(_screener); _libraryScreening = _screen.createLibraryScreening(_admin, _screener, new LocalDate()); _screen = genericEntityDao.mergeEntity(_screen); _libraryScreening = (LibraryScreening) _screen.getLabActivities().first(); } public void testAddDeleteAssayPlates() { activityViewer.viewEntity(_libraryScreening); ((LibraryScreening) activityViewer.getEntity()).setNumberOfReplicates(2); activityViewer.getEntity().setDateOfActivity(new LocalDate()); activityViewer.setNewPlateRangeScreenedStartPlate(1); activityViewer.setNewPlateRangeScreenedEndPlate(2); activityViewer.getNewPlateRangeScreenedCopy().setSelection("A"); activityViewer.addNewPlateRangeScreened(); activityViewer.setNewPlateRangeScreenedStartPlate(4); activityViewer.setNewPlateRangeScreenedEndPlate(4); activityViewer.getNewPlateRangeScreenedCopy().setSelection("A"); activityViewer.addNewPlateRangeScreened(); activityViewer.save(); _libraryScreening = genericEntityDao.reloadEntity((LibraryScreening) activityViewer.getEntity(), true, LibraryScreening.assayPlatesScreened); assertEquals(Sets.newHashSet(1, 2, 4), Sets.newHashSet(Iterables.transform(_libraryScreening.getAssayPlatesScreened(), AssayPlate.ToPlateNumber))); activityViewer.viewEntity(_libraryScreening); activityViewer.getPlatesScreenedDataModel().setRowIndex(1); activityViewer.deletePlateRange(); activityViewer.save(); _libraryScreening = genericEntityDao.reloadEntity((LibraryScreening) activityViewer.getEntity(), true, LibraryScreening.assayPlatesScreened); assertEquals(Sets.newHashSet(1, 2), Sets.newHashSet(Iterables.transform(_libraryScreening.getAssayPlatesScreened(), AssayPlate.ToPlateNumber))); activityViewer.viewEntity(_libraryScreening); activityViewer.getPlatesScreenedDataModel().setRowIndex(0); activityViewer.deletePlateRange(); activityViewer.setNewPlateRangeScreenedStartPlate(2); activityViewer.setNewPlateRangeScreenedEndPlate(2); activityViewer.getNewPlateRangeScreenedCopy().setSelection("A"); activityViewer.addNewPlateRangeScreened(); activityViewer.setNewPlateRangeScreenedStartPlate(3); activityViewer.setNewPlateRangeScreenedEndPlate(4); activityViewer.getNewPlateRangeScreenedCopy().setSelection("A"); activityViewer.addNewPlateRangeScreened(); activityViewer.save(); _libraryScreening = genericEntityDao.reloadEntity((LibraryScreening) activityViewer.getEntity(), true, LibraryScreening.assayPlatesScreened); assertEquals(Sets.newHashSet(2, 3, 4), Sets.newHashSet(Iterables.transform(_libraryScreening.getAssayPlatesScreened(), AssayPlate.ToPlateNumber))); } public void testServiceActivity() { userViewer.viewEntity(_screener); assertEquals(ScreensaverConstants.VIEW_ACTIVITY, userViewer.addServiceActivity()); List<SelectItem> selectItems = activityViewer.getServicedScreen().getSelectItems(); assertEquals("", selectItems.get(0).getValue()); assertEquals("<none>", selectItems.get(0).getLabel()); assertEquals(_screen.getScreenId().toString(), selectItems.get(1).getValue()); assertEquals(_screen.getFacilityId() + ": " + _screen.getTitle(), selectItems.get(1).getLabel()); activityViewer.getServicedScreen().setValue(_screen.getScreenId().toString()); activityViewer.getEntity().setDateOfActivity(new LocalDate(2011, 1, 1)); ((ServiceActivity) activityViewer.getEntity()).setType(ServiceActivityType.MEDCHEM_CONSULT); // note: this assertion also initializes the performedBy UISelectOneBean, which is required for save() to succeed assertEquals(_admin, activityViewer.getPerformedBy().getSelection()); assertEquals(ScreensaverConstants.BROWSE_SCREENERS, activityViewer.save()); assertTrue(userViewer.getContextualSearchResults().isEntityView()); assertEquals(2, userViewer.getUserActivitiesCount()); ScreeningRoomUser screener2 = new EntityInflator<ScreeningRoomUser>(genericEntityDao, _screener, true). need(ScreeningRoomUser.serviceActivities.to(Activity.performedBy)). need(ScreeningRoomUser.serviceActivities.to(ServiceActivity.servicedUser)). need(ScreeningRoomUser.serviceActivities.to(ServiceActivity.servicedScreen)). inflate(); assertEquals(1, screener2.getServiceActivities().size()); ServiceActivity serviceActivity = screener2.getServiceActivities().first(); assertEquals(new LocalDate(2011, 1, 1), serviceActivity.getDateOfActivity()); assertEquals(_admin, serviceActivity.getPerformedBy()); assertEquals(_screener, serviceActivity.getServicedUser()); assertEquals(genericEntityDao.reloadEntity(_screen), serviceActivity.getServicedScreen()); assertEquals(ScreensaverConstants.BROWSE_ACTIVITIES, userViewer.browseUserActivities()); EntitySearchResults<Activity,Activity,?> activitiesBrowser = activityViewer.getContextualSearchResults(); assertEquals(2, activitiesBrowser.getRowCount()); activitiesBrowser.getDataTableModel().setRowIndex(1); activitiesBrowser.getColumnManager().getVisibleColumnModel().setRowIndex(0); assertEquals(ScreensaverConstants.REDISPLAY_PAGE_ACTION_RESULT, activitiesBrowser.cellAction()); assertEquals(serviceActivity, activityViewer.getEntity()); activityViewer.edit(); ((ServiceActivity) activityViewer.getEntity()).setType(ServiceActivityType.AUTOMATION); assertEquals(ScreensaverConstants.BROWSE_ACTIVITIES, activityViewer.save()); assertEquals(ServiceActivityType.AUTOMATION, genericEntityDao.reloadEntity(serviceActivity).getType()); } }