package qa.qcri.aidr.dbmanager.ejb.remote.facade.imp; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Persistence; import org.apache.log4j.Logger; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import qa.qcri.aidr.common.exception.PropertyNotSetException; import qa.qcri.aidr.dbmanager.dto.CollectionDTO; import qa.qcri.aidr.dbmanager.dto.CrisisTypeDTO; import qa.qcri.aidr.dbmanager.dto.ModelDTO; import qa.qcri.aidr.dbmanager.dto.ModelFamilyDTO; import qa.qcri.aidr.dbmanager.dto.ModelNominalLabelDTO; import qa.qcri.aidr.dbmanager.dto.ModelNominalLabelIdDTO; import qa.qcri.aidr.dbmanager.dto.NominalAttributeDTO; import qa.qcri.aidr.dbmanager.dto.NominalLabelDTO; import qa.qcri.aidr.dbmanager.dto.UsersDTO; import qa.qcri.aidr.dbmanager.entities.model.Model; public class TestModelNominalLabelResourceFacadeImp { private static ModelNominalLabelResourceFacadeImp modelNominalLabelResourceFacadeImp; private static NominalLabelResourceFacadeImp nominalLabelResourceFacadeImp; private static ModelResourceFacadeImp modelResourceFacadeImp; private static ModelFamilyResourceFacadeImp modelFamilyResourceFacadeImp; private static CollectionResourceFacadeImp crisisResourceFacadeImp; private static CrisisTypeResourceFacadeImp crisisTypeResourceFacadeImp; private static NominalAttributeResourceFacadeImp nominalAttributeResourceFacadeImp; private static UsersResourceFacadeImp userResourceFacadeImp; private static EntityManager entityManager; private UsersDTO user; private ModelFamilyDTO modelFamilyDTO; private CollectionDTO crisisDTO; private CrisisTypeDTO crisisTypeDTO; private Long modelID; private ModelNominalLabelDTO modelNominalLabel; private NominalLabelDTO nominalLabelDTO; private static Logger logger = Logger.getLogger("db-manager-log"); @BeforeClass public static void setUpBeforeClass() { modelNominalLabelResourceFacadeImp = new ModelNominalLabelResourceFacadeImp(); nominalLabelResourceFacadeImp = new NominalLabelResourceFacadeImp(); modelResourceFacadeImp = new ModelResourceFacadeImp(); modelFamilyResourceFacadeImp = new ModelFamilyResourceFacadeImp(); crisisResourceFacadeImp = new CollectionResourceFacadeImp(); crisisTypeResourceFacadeImp = new CrisisTypeResourceFacadeImp(); nominalAttributeResourceFacadeImp = new NominalAttributeResourceFacadeImp(); userResourceFacadeImp = new UsersResourceFacadeImp(); entityManager = Persistence.createEntityManagerFactory( "ProjectDBManagerTest-ejbPU").createEntityManager(); modelNominalLabelResourceFacadeImp.setEntityManager(entityManager); nominalLabelResourceFacadeImp.setEntityManager(entityManager); modelResourceFacadeImp.setEntityManager(entityManager); modelFamilyResourceFacadeImp.setEntityManager(entityManager); crisisResourceFacadeImp.setEntityManager(entityManager); crisisTypeResourceFacadeImp.setEntityManager(entityManager); userResourceFacadeImp.setEntityManager(entityManager); nominalAttributeResourceFacadeImp.setEntityManager(entityManager); } @Before public void setUp() { try { // fetch crisis type crisisTypeDTO = crisisTypeResourceFacadeImp.findCrisisTypeByID(10L); user = new UsersDTO("userDBTest"+new Date(), "normal"+ new Date()); entityManager.getTransaction().begin(); user = userResourceFacadeImp.addUser(user); entityManager.getTransaction().commit(); // insert crisis type crisisDTO = new CollectionDTO("tesName"+new Date(), "testCode"+new Date(), false, false, crisisTypeDTO, user, user); entityManager.getTransaction().begin(); crisisDTO = crisisResourceFacadeImp.addCrisis(crisisDTO); entityManager.getTransaction().commit(); // fetch nominal attribute : nominal attribute with id : 1 already exists NominalAttributeDTO nominalAttributeDTO = nominalAttributeResourceFacadeImp.getAttributeByID(1L); modelFamilyDTO = new ModelFamilyDTO(); modelFamilyDTO.setCrisisDTO(crisisDTO); modelFamilyDTO.setIsActive(true); modelFamilyDTO.setNominalAttributeDTO(nominalAttributeDTO); // insert nominal attribute entityManager.getTransaction().begin(); boolean success = modelFamilyResourceFacadeImp.addCrisisAttribute(modelFamilyDTO); entityManager.getTransaction().commit(); assertTrue(success); List<ModelFamilyDTO> modelFamilyDTOs = modelFamilyResourceFacadeImp.getAllModelFamiliesByCrisis(crisisDTO.getCrisisID()); assertNotNull(modelFamilyDTOs); modelFamilyDTO = modelFamilyDTOs.get(0); Model model = new Model(); model.setModelFamily(modelFamilyDTO.toEntity()); model.setAvgAuc(0); model.setAvgPrecision(1); model.setAvgRecall(1); model.setIsCurrentModel(true); model.setTrainingCount(1); model.setTrainingTime(new Date()); // insert model entityManager.getTransaction().begin(); modelID = modelResourceFacadeImp.save(model); entityManager.getTransaction().commit(); assertNotNull(modelID); ModelDTO modelDTO = modelResourceFacadeImp.getModelByID(modelID); nominalLabelDTO = nominalLabelResourceFacadeImp.getNominalLabelByCode("informative"); modelNominalLabel = new ModelNominalLabelDTO(); modelNominalLabel.setNominalLabelDTO(nominalLabelDTO); modelNominalLabel.setNominalAttributeId(1L); modelNominalLabel.setModelDTO(modelDTO); modelNominalLabel.setIdDTO(new ModelNominalLabelIdDTO(modelID, nominalLabelDTO.getNominalLabelId())); // save nominal label entityManager.getTransaction().begin(); modelNominalLabel = modelNominalLabelResourceFacadeImp.addModelNominalLabel(modelNominalLabel); entityManager.getTransaction().commit(); assertTrue("ModelNominalLabel Created with id : " + modelNominalLabel.getNominalAttributeId(), modelNominalLabel.getIdDTO() != null); } catch (PropertyNotSetException ex) { logger.error("PropertyNotSetException while accessing/inserting data "+ex.getMessage()); } } @After public void tearDown() { // tear down data try { if (modelNominalLabel != null) { entityManager.getTransaction().begin(); modelNominalLabelResourceFacadeImp.deleteModelNominalLabel(modelNominalLabel); entityManager.getTransaction().commit(); } } catch (PropertyNotSetException e) { logger.error("PropertyNotSetException while deleting model nominal label "+e.getMessage()); } Model model = modelResourceFacadeImp.getById(modelID); assertNotNull(model); modelResourceFacadeImp.delete(model); model = modelResourceFacadeImp.getById(modelID); assertTrue(model == null); try { List<ModelFamilyDTO> modelFamilyDTOs = modelFamilyResourceFacadeImp.getAllModelFamiliesByCrisis(crisisDTO.getCrisisID()); if (modelFamilyDTOs != null && modelFamilyDTOs.size() > 0) { for(ModelFamilyDTO modelFamilyDTO : modelFamilyDTOs) { entityManager.getTransaction().begin(); modelFamilyResourceFacadeImp.deleteModelFamily(modelFamilyDTO.getModelFamilyId()); entityManager.getTransaction().commit(); } } } catch (PropertyNotSetException ex) { logger.error("PropertyNotSetException while deleting model family "+ex.getMessage()); } try { if (crisisDTO != null) { entityManager.getTransaction().begin(); crisisResourceFacadeImp.deleteCrisis(crisisDTO); entityManager.getTransaction().commit(); CollectionDTO result = crisisResourceFacadeImp.getCrisisByCode(crisisDTO.getCode()); assertNull(result); } } catch (PropertyNotSetException ex) { logger.error("PropertyNotSetException while deleting crisis "+ex.getMessage()); } try { if (user != null) { entityManager.getTransaction().begin(); user = userResourceFacadeImp.getUserByName(user.getName()); userResourceFacadeImp.deleteUser(user.getUserID()); entityManager.getTransaction().commit(); UsersDTO result = userResourceFacadeImp.getUserByName(user.getName()); assertNull(result); } } catch (PropertyNotSetException ex) { logger.error("PropertyNotSetException while deleting user "+ex.getMessage()); } } @AfterClass public static void tearDownAfterClass() { modelResourceFacadeImp.getEntityManager().close(); } /** * Test to get all model nominal labels */ @Test public void testGetAllModelNominalLabels() { List<ModelNominalLabelDTO> modelNominalLabelDTOs = modelNominalLabelResourceFacadeImp.getAllModelNominalLabels(); assertNotNull(modelNominalLabelDTOs); assertTrue(modelNominalLabelDTOs.size() >= 1); } /** * Test to get all model nominal labels by model id */ /*@Test public void testGetAllModelNominalLabelsByModelID() { List<ModelNominalLabelDTO> modelNominalLabelDTOs = modelNominalLabelResourceFacadeImp.getAllModelNominalLabelsByModelID(modelID, crisisDTO.getCode()); assertNotNull(modelNominalLabelDTOs); assertTrue(modelNominalLabelDTOs.size() == 1); }*/ /** * Test to get all model nominal label by nominalLabel */ @Test public void testGetModelNominalLabelByID() { try { ModelNominalLabelDTO modelNominalLabelDTO = modelNominalLabelResourceFacadeImp.getModelNominalLabelByID(nominalLabelDTO.getNominalLabelId()); assertNotNull(modelNominalLabelDTO); } catch (PropertyNotSetException e) { logger.error("PropertyNotSetException while executing testGetModelNominalLabelByID "+e.getMessage()); } } /** * Test to edit modelNominalLabel */ @Test public void testEditModelNominalLabel() { try { modelNominalLabel.setClassifiedDocumentCount(5); ModelNominalLabelDTO modelNominalLabelDTO = modelNominalLabelResourceFacadeImp.editModelNominalLabel(modelNominalLabel); assertNotNull(modelNominalLabelDTO); assertTrue("Data updated", modelNominalLabelDTO.getClassifiedDocumentCount() == 5); } catch (PropertyNotSetException e) { logger.error("PropertyNotSetException while executing testEditModelNominalLabel "+e.getMessage()); } } /** * Test to delete modelNominalLabel */ @Test public void testDeleteModelNominalLabel() { try { int recordsDeleted = modelNominalLabelResourceFacadeImp.deleteModelNominalLabel(modelNominalLabel); assertTrue("Records deleted", recordsDeleted == 1); } catch (PropertyNotSetException e) { logger.error("PropertyNotSetException while executing testDeleteModelNominalLabel "+e.getMessage()); } } /** * Test to check modelNominalLable existence */ @Test public void testIsModelNominalLabelExists() { try { boolean exists = modelNominalLabelResourceFacadeImp.isModelNominalLabelExists(nominalLabelDTO.getNominalLabelId()); assertTrue("testIsModelNominalLabelExists", exists); } catch (PropertyNotSetException e) { logger.error("PropertyNotSetException while executing testIsModelNominalLabelExists "+e.getMessage()); } } }