// $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.db; import java.util.Iterator; import java.util.List; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import edu.harvard.med.screensaver.model.libraries.Library; import edu.harvard.med.screensaver.model.libraries.Well; import edu.harvard.med.screensaver.model.screenresults.AnnotationType; import edu.harvard.med.screensaver.model.screens.ProjectPhase; import edu.harvard.med.screensaver.model.screens.Screen; import edu.harvard.med.screensaver.model.screens.ScreenType; import edu.harvard.med.screensaver.model.screens.StudyType; import edu.harvard.med.screensaver.model.users.LabHead; import edu.harvard.med.screensaver.test.AbstractSpringPersistenceTest; import edu.harvard.med.screensaver.test.MakeDummyEntities; /** * @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a> */ public class ScreenDAOTest extends AbstractSpringPersistenceTest { private static final Logger log = Logger.getLogger(ScreenDAOTest.class); @Autowired protected ScreenDAO screenDao; public void testDelete() { genericEntityDao.doInTransaction(new DAOTransaction() { public void runTransaction() { Screen screen = MakeDummyEntities.makeDummyScreen(1); genericEntityDao.persistEntity(screen); } }); genericEntityDao.doInTransaction(new DAOTransaction() { public void runTransaction() { screenDao.deleteStudy(genericEntityDao.findEntityByProperty(Screen.class, Screen.facilityId.getPropertyName(), "1")); } }); Screen screen1 = genericEntityDao.findEntityByProperty(Screen.class, Screen.facilityId.getPropertyName(), "1"); assertNull("screen not deleted", screen1); } /** * Delete a study that has annotations and annotation values associated. */ public void testDeleteStudy() { genericEntityDao.doInTransaction(new DAOTransaction() { public void runTransaction() { Library library = MakeDummyEntities.makeDummyLibrary(1, ScreenType.SMALL_MOLECULE, 1); Iterator<Well> wellsIter = library.getWells().iterator(); Well well1 = wellsIter.next(); genericEntityDao.saveOrUpdateEntity(library); Screen screen = MakeDummyEntities.makeDummyScreen(1); genericEntityDao.persistEntity(screen); // Create the dummy annotation AnnotationType aType = new AnnotationType((Screen) screen, "dummy annotation", "dummy annotation desc", 0, Boolean.TRUE); aType.createAnnotationValue(well1.getLatestReleasedReagent(), "1.0"); genericEntityDao.saveOrUpdateEntity(aType); } }); genericEntityDao.doInTransaction(new DAOTransaction() { public void runTransaction() { screenDao.deleteStudy(genericEntityDao.findEntityByProperty(Screen.class, Screen.facilityId.getPropertyName(), "1")); } }); Screen screen1 = genericEntityDao.findEntityByProperty(Screen.class, Screen.facilityId.getPropertyName(), "1"); assertNull("screen not deleted", screen1); } public void testFindRelatedScreens() { LabHead user = new LabHead("Test", "User", null); Screen screen1 = new Screen(null, "1", user, user, ScreenType.RNAI, StudyType.IN_VITRO, ProjectPhase.PRIMARY_SCREEN, "test"); screen1.setProjectId("PID1"); genericEntityDao.saveOrUpdateEntity(screen1); Screen screen2 = new Screen(null, "1-1", user, user, ScreenType.RNAI, StudyType.IN_VITRO, ProjectPhase.PRIMARY_SCREEN, "test"); screen2.setProjectId("PID1"); genericEntityDao.saveOrUpdateEntity(screen2); Screen screen3 = new Screen(null, "1-2", user, user, ScreenType.RNAI, StudyType.IN_VITRO, ProjectPhase.PRIMARY_SCREEN, "test"); screen3.setProjectId("PID1"); genericEntityDao.saveOrUpdateEntity(screen3); List<Screen> relatedScreens = screenDao.findRelatedScreens(screen1); assertEquals(ImmutableList.of("1", "1-1", "1-2"), ImmutableList.copyOf(Iterables.transform(relatedScreens, Screen.ToFacilityId))); } public void testIsScreenFacilityIdUnique() { LabHead user = new LabHead("Test", "User", null); Screen screen1 = new Screen(null, "1", user, user, ScreenType.RNAI, StudyType.IN_VITRO, ProjectPhase.PRIMARY_SCREEN, "test"); assertTrue(screenDao.isScreenFacilityIdUnique(screen1)); genericEntityDao.saveOrUpdateEntity(screen1); Screen screen2 = new Screen(null, "2", user, user, ScreenType.RNAI, StudyType.IN_VITRO, ProjectPhase.PRIMARY_SCREEN, "test"); genericEntityDao.saveOrUpdateEntity(screen2); assertTrue(screenDao.isScreenFacilityIdUnique(screen2)); screen2.setFacilityId("1"); assertFalse(screenDao.isScreenFacilityIdUnique(screen2)); Screen screen3 = new Screen(null, "1", user, user, ScreenType.RNAI, StudyType.IN_VITRO, ProjectPhase.PRIMARY_SCREEN, "test"); assertFalse(screenDao.isScreenFacilityIdUnique(screen3)); screen3.setFacilityId("3"); assertTrue(screenDao.isScreenFacilityIdUnique(screen3)); genericEntityDao.saveOrUpdateEntity(screen3); assertTrue(screenDao.isScreenFacilityIdUnique(screen3)); } }