// $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.model.cherrypicks; import java.beans.IntrospectionException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import junit.framework.TestSuite; import org.apache.log4j.Logger; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import edu.harvard.med.iccbl.screensaver.policy.cherrypicks.SmallMoleculeCherryPickRequestAllowancePolicy; import edu.harvard.med.screensaver.db.DAOTransaction; import edu.harvard.med.screensaver.db.LibrariesDAO; import edu.harvard.med.screensaver.model.activities.AdministrativeActivity; import edu.harvard.med.screensaver.model.activities.AdministrativeActivityType; import edu.harvard.med.screensaver.model.libraries.Library; import edu.harvard.med.screensaver.model.libraries.LibraryType; import edu.harvard.med.screensaver.model.libraries.LibraryWellType; import edu.harvard.med.screensaver.model.libraries.MolecularFormula; import edu.harvard.med.screensaver.model.libraries.PlateSize; import edu.harvard.med.screensaver.model.libraries.ReagentVendorIdentifier; import edu.harvard.med.screensaver.model.libraries.Well; import edu.harvard.med.screensaver.model.screenresults.AssayWell; import edu.harvard.med.screensaver.model.screenresults.DataColumn; import edu.harvard.med.screensaver.model.screenresults.ScreenResult; import edu.harvard.med.screensaver.model.screens.Screen; import edu.harvard.med.screensaver.model.screens.ScreenType; import edu.harvard.med.screensaver.model.users.AdministratorUser; import edu.harvard.med.screensaver.service.libraries.LibraryCreator; import edu.harvard.med.screensaver.test.MakeDummyEntities; public class SmallMoleculeCherryPickRequestTest extends CherryPickRequestTest<SmallMoleculeCherryPickRequest> { public static TestSuite suite() { return buildTestSuite(SmallMoleculeCherryPickRequestTest.class, SmallMoleculeCherryPickRequest.class); } private static Logger log = Logger.getLogger(SmallMoleculeCherryPickRequestTest.class); @Autowired protected LibrariesDAO librariesDao; @Autowired protected LibraryCreator libraryCreator; @Autowired protected SmallMoleculeCherryPickRequestAllowancePolicy smallMoleculeCherryPickRequestAllowancePolicy; public SmallMoleculeCherryPickRequestTest() { super(SmallMoleculeCherryPickRequest.class); } public void testCherryPickAllowance() { schemaUtil.truncateTables(); genericEntityDao.doInTransaction(new DAOTransaction() { public void runTransaction() { AdministratorUser admin = new AdministratorUser("Admin", "User"); Library library = new Library(admin, "Small Molecule Library", "smlib", ScreenType.SMALL_MOLECULE, LibraryType.COMMERCIAL, 1, 10, PlateSize.WELLS_384); /*LibraryContentsVersion libraryContentsVersion =*/ library.createContentsVersion(admin); libraryCreator.createWells(library); int iSmiles = 0; List<Well> wells = new ArrayList<Well>(library.getWells()); for (Well well : wells) { well.setLibraryWellType(LibraryWellType.EXPERIMENTAL); // every small molecule reagent in two distinct wells if (iSmiles++ % 2 == 0) { int suffix = (int) (iSmiles / 2); well.createSmallMoleculeReagent(new ReagentVendorIdentifier("vendor", "smiles"), "molfile", "smiles" + suffix, "inchi" + suffix, new BigDecimal("1.011"), new BigDecimal("1.011"), new MolecularFormula("C3")); } } library.getLatestContentsVersion().release(new AdministrativeActivity((AdministratorUser) library.getLatestContentsVersion().getLoadingActivity().getPerformedBy(), new LocalDate(), AdministrativeActivityType.LIBRARY_CONTENTS_VERSION_RELEASE)); genericEntityDao.persistEntity(library); Screen screen = MakeDummyEntities.makeDummyScreen(1); ScreenResult screenResult = screen.createScreenResult(); DataColumn dataColumn = screenResult.createDataColumn("values"); for (Well well : wells) { AssayWell assayWell = screenResult.createAssayWell(well); dataColumn.createResultValue(assayWell, 1.0); } SmallMoleculeCherryPickRequest cherryPickRequest = (SmallMoleculeCherryPickRequest) screen.createCherryPickRequest((AdministratorUser) screen.getCreatedBy()); for (int i = 0; i < 200; ++i) { cherryPickRequest.createScreenerCherryPick(wells.get(i)); } genericEntityDao.persistEntity(cherryPickRequest.getScreen()); genericEntityDao.flush(); assertEquals((int) ((10 * 384) / 2 * 0.003), smallMoleculeCherryPickRequestAllowancePolicy.getCherryPickAllowance(cherryPickRequest)); assertEquals(200, smallMoleculeCherryPickRequestAllowancePolicy.getCherryPickAllowanceUsed(cherryPickRequest)); genericEntityDao.saveOrUpdateEntity(screen.getLeadScreener()); genericEntityDao.saveOrUpdateEntity(screen.getLabHead()); genericEntityDao.saveOrUpdateEntity(screen); } }); } }