package com.cse10.classifier; import com.cse10.article.Article; import com.cse10.article.CeylonTodayArticle; import com.cse10.article.CrimeArticle; import com.cse10.database.DatabaseConstants; import com.cse10.database.DatabaseHandler; import com.cse10.util.ArticleConverter; import junit.framework.TestCase; import org.junit.*; import org.junit.Test; import weka.core.Instances; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; public class GenericDataHandlerTest { private GenericDataHandler genericDataHandler; static String previousDB; @BeforeClass public static void setUpClass() throws Exception { previousDB = DatabaseConstants.DB_URL; DatabaseConstants.DB_URL = "jdbc:mysql://localhost:3306/newsstats_test"; } @AfterClass public static void tearDownClass() throws Exception { DatabaseConstants.DB_URL = previousDB; } @Before public void setUp() throws Exception { genericDataHandler = new GenericDataHandler(); } @After public void tearDown() throws Exception { } @org.junit.Test public void testPrintDescription() throws Exception { String s = "Data Handler -> This Data Handler will Load all of the Training Data"; TestCase.assertEquals(s, genericDataHandler.printDescription()); } @Test public void testLoadTrainingData() throws Exception { FeatureVectorTransformer featureVectorTransformer = new FeatureVectorTransformer(); Instances trainingData = genericDataHandler.loadTrainingData(featureVectorTransformer); //test number of articles TestCase.assertEquals(151, trainingData.numInstances()); int crimeCount = 0; int otherCount = 0; for (int i = 0; i < trainingData.numInstances(); i++) { if (trainingData.instance(i).classValue() == 0.0) crimeCount++; else otherCount++; } //test number of crime articles and other articles TestCase.assertEquals(39, crimeCount); TestCase.assertEquals(112, otherCount); } @Test public void testLoadTestData() throws Exception { Instances instances = genericDataHandler.loadTestData(CeylonTodayArticle.class, "where id<100", false); TestCase.assertEquals(91, instances.numInstances()); } @Test public void testGetArticleIds() throws Exception { Instances instances = genericDataHandler.loadTestData(CeylonTodayArticle.class, "where id<100", false); HashMap<Integer, Integer> ids = genericDataHandler.getArticleIds(); TestCase.assertEquals(instances.numInstances(), ids.keySet().size()); instances = genericDataHandler.loadTestData(CeylonTodayArticle.class, "where id<100", true); ids = genericDataHandler.getArticleIds(); TestCase.assertEquals(instances.numInstances(), ids.keySet().size()); } @Test public void testGetFileName() throws Exception { TestCase.assertEquals("generic", genericDataHandler.getFileName()); } @Test public void testIsFeatureVectorTransformerRequired() throws Exception { TestCase.assertEquals(true, genericDataHandler.isFeatureVectorTransformerRequired()); } @Test public void testFetchArticlesWithNullLabels() throws Exception { List<Article> articles = genericDataHandler.fetchArticlesWithNullLabels(CeylonTodayArticle.class, new Date()); TestCase.assertEquals(0, articles.size()); } @Test public void testFetchArticlesByIdList() throws Exception { List<Integer> idList = new ArrayList<>(); idList.add(1); idList.add(2); idList.add(3); List<Article> articles = genericDataHandler.fetchArticlesByIdList(CeylonTodayArticle.class, idList); TestCase.assertEquals(3, articles.size()); } @Test public void testInsertCrimeArticleAndUpdatePprArticle() throws Exception { int dataSize = DatabaseHandler.fetchArticles(CrimeArticle.class).size(); List<Article> articles = DatabaseHandler.fetchArticles(CeylonTodayArticle.class); Article updatedArticle = null; //find article with other label for (Article article : articles) { if (article.getLabel().equals("other")) { updatedArticle = article; break; } } updatedArticle.setLabel("crime"); articles = new ArrayList<>(); articles.add(updatedArticle); List<CrimeArticle> crimeArticles = ArticleConverter.convertToCrimeArticle(articles, CeylonTodayArticle.class); genericDataHandler.insertCrimeArticleAndUpdatePprArticle(crimeArticles.get(0), updatedArticle); TestCase.assertEquals(dataSize + 1, DatabaseHandler.fetchArticles(CrimeArticle.class).size()); List<Integer> ids = new ArrayList<>(); ids.add(updatedArticle.getId()); TestCase.assertEquals("crime", DatabaseHandler.fetchArticlesByIdList(CeylonTodayArticle.class, ids).get(0).getLabel()); //restore to original state updatedArticle.setLabel("other"); genericDataHandler.updateArticle(updatedArticle); } @Test public void testUpdateArticle() throws Exception { List<Article> articles = DatabaseHandler.fetchArticles(CeylonTodayArticle.class); Article article = articles.get(0); String originalLabel = article.getLabel(); String upDatedLabel = ""; if (originalLabel.equals("crime")) { upDatedLabel = "other"; } else if (originalLabel.equals("other")) { upDatedLabel = "crime"; } else { upDatedLabel = "other"; } article.setLabel(upDatedLabel); genericDataHandler.updateArticle(article); articles = DatabaseHandler.fetchArticles(CeylonTodayArticle.class); article = articles.get(0); TestCase.assertEquals(upDatedLabel, article.getLabel()); //restore to original state article.setLabel(originalLabel); genericDataHandler.updateArticle(article); articles = DatabaseHandler.fetchArticles(CeylonTodayArticle.class); article = articles.get(0); TestCase.assertEquals(originalLabel, article.getLabel()); } }