package com.cse10.util; import com.cse10.article.Article; import com.cse10.article.CrimeArticle; import com.cse10.database.DatabaseConstants; import com.cse10.database.DatabaseHandler; import com.cse10.entities.CrimeEntityGroup; import com.cse10.entities.CrimePerson; import com.cse10.entities.LocationDistrictMapper; import junit.framework.TestCase; import org.apache.log4j.Logger; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import java.util.Date; public class TableCleanerTest { private static Logger logger = Logger.getLogger(TableCleanerTest.class); private static String previousDB; @BeforeClass public static void setUpClass() throws Exception { previousDB = DatabaseConstants.DB_URL; DatabaseConstants.DB_URL = "jdbc:mysql://localhost:3306/newsstats_test"; logger.info("Database changed into test db"); } @AfterClass public static void tearDownClass() throws Exception { DatabaseConstants.DB_URL = previousDB; logger.info("Database changed back"); DatabaseHandler.closeDatabase(); } @Test public void testUndoClassifications() throws Exception { boolean inserted = false; if (DatabaseHandler.getRowCount(CrimeArticle.class) == 0) { //if crime table is already empty inserted = true; CrimeArticle crimeArticle = new CrimeArticle(); crimeArticle.setId(1); crimeArticle.setTitle("article title goes here"); crimeArticle.setContent("article content goes here"); crimeArticle.setAuthor("author's name goes here"); crimeArticle.setCreatedDate(new Date()); DatabaseHandler.insertArticle(crimeArticle); logger.info("a crime article inserted"); } TableCleaner.undoClassifications(true); TestCase.assertTrue(DatabaseHandler.getRowCount(CrimeArticle.class) == 0); TestCase.assertTrue(DatabaseHandler.getRowCount(Article.class, "label", "crime") == 0); TestCase.assertTrue(DatabaseHandler.getRowCount(Article.class, "label", "other") == 0); } @Test public void testUndoEntityExtraction() throws Exception { boolean inserted = false; int id = 999999; if (DatabaseHandler.getRowCount(CrimeEntityGroup.class) == 0 || DatabaseHandler.getRowCount(CrimePerson.class) == 0) { inserted = true; LocationDistrictMapper locationDistrictMapper = new LocationDistrictMapper(); locationDistrictMapper.setLocation("Moratuwa"); locationDistrictMapper.setDistrict("Colombo"); CrimeEntityGroup crimeEntityGroup = new CrimeEntityGroup(); crimeEntityGroup.setId(id); crimeEntityGroup.setCrimeType("robbery"); crimeEntityGroup.setLocationDistrict(locationDistrictMapper); crimeEntityGroup.setCriminal("Wasantha"); crimeEntityGroup.setPossession("drug"); crimeEntityGroup.setCrimeDate(new Date()); DatabaseHandler.insertCrimeEntities(crimeEntityGroup); logger.info("a crime entity group inserted"); CrimePerson crimePerson = new CrimePerson(); crimePerson.setCrimePersonId(id); crimePerson.setName("Wasantha"); crimePerson.setEntityGroup(crimeEntityGroup); DatabaseHandler.insertCrimePerson(crimePerson); logger.info("a crime person inserted"); } TableCleaner.undoEntityExtraction(); TestCase.assertTrue(DatabaseHandler.getRowCount(CrimePerson.class) == 0); TestCase.assertTrue(DatabaseHandler.getRowCount(CrimeEntityGroup.class) == 0); if (inserted) { DatabaseHandler.executeUpdate("DELETE FROM " + DatabaseConstants.classToTableName.get(CrimePerson.class) + " WHERE crime_person_id = " + id); DatabaseHandler.delete(CrimeEntityGroup.class, id); } } @Test public void testUndoDuplicateDetection() throws Exception { boolean inserted = false; int id = 999999; if (DatabaseHandler.getRowCount(CrimeEntityGroup.class, "label", "NULL") == 0) { inserted = true; LocationDistrictMapper locationDistrictMapper = new LocationDistrictMapper(); locationDistrictMapper.setLocation("Moratuwa"); locationDistrictMapper.setDistrict("Colombo"); CrimeEntityGroup crimeEntityGroup = new CrimeEntityGroup(); crimeEntityGroup.setId(id); crimeEntityGroup.setLabel("unique"); crimeEntityGroup.setCrimeType("robbery"); crimeEntityGroup.setLocationDistrict(locationDistrictMapper); crimeEntityGroup.setCriminal("Wasantha"); crimeEntityGroup.setPossession("drug"); crimeEntityGroup.setCrimeDate(new Date()); DatabaseHandler.insertCrimeEntities(crimeEntityGroup); logger.info("a crime entity group inserted"); } TableCleaner.undoDuplicateDetection(); TestCase.assertTrue(DatabaseHandler.getRowCount(CrimeEntityGroup.class, "label", "NULL") == 0); if (inserted) { DatabaseHandler.delete(CrimeEntityGroup.class, id); } } }