package com.cse10.database;
import com.cse10.article.Article;
import com.cse10.article.NewsFirstArticle;
import com.cse10.article.TrainingArticle;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.junit.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class DatabaseHandlerTest {
private static Logger logger = Logger.getLogger(DatabaseHandlerTest.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();
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testInsertArticle() throws Exception {
Article article = new NewsFirstArticle();
article.setTitle("test_insert_123456789");
article.setContent("content");
article.setAuthor("author");
article.setCreatedDate(new Date());
DatabaseHandler.insertArticle(article);
int id = 0;
boolean flag = false;
for (Article article2 : DatabaseHandler.fetchArticles(NewsFirstArticle.class)) {
if (article2.getTitle().equals("test_insert_123456789")) {
id = article2.getId();
flag = true;
break;
}
}
TestCase.assertTrue(flag);
DatabaseHandler.delete(NewsFirstArticle.class, id);
}
@Test
public void testUpdateArticle() throws Exception {
Article article = new NewsFirstArticle();
article.setTitle("test_update_123456789");
article.setContent("content");
article.setAuthor("author");
article.setCreatedDate(new Date());
DatabaseHandler.insertArticle(article);
for (Article article2 : DatabaseHandler.fetchArticles(NewsFirstArticle.class)) {
if (article2.getTitle().equals("test_update_123456789")) {
article2.setTitle("test_update_123456789_updated");
DatabaseHandler.updateArticle(article2);
break;
}
}
int id = 0;
boolean flag = false;
for (Article article2 : DatabaseHandler.fetchArticles(NewsFirstArticle.class)) {
if (article2.getTitle().equals("test_update_123456789_updated")) {
id = article2.getId();
flag = true;
break;
}
}
TestCase.assertTrue(flag);
DatabaseHandler.delete(NewsFirstArticle.class, id);
}
@Test
public void testFetchArticlesByIdList() throws Exception {
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(4);
ids.add(5);
List<Article> articles = DatabaseHandler.fetchArticlesByIdList(TrainingArticle.class, ids);
for (Article article : articles) {
TestCase.assertTrue(article.getId() > 0 && article.getId() < 6);
}
}
@Test
public void testFetchArticlesByIdRange() throws Exception {
List<Article> articles = DatabaseHandler.fetchArticlesByIdRange(TrainingArticle.class, 1, 5);
for (Article article : articles) {
TestCase.assertTrue(article.getId() > 0 && article.getId() < 6);
}
}
@Test
public void testFetchArticlesByIdStarting() throws Exception {
int maxId = DatabaseHandler.getMaxIdOf(TrainingArticle.class);
TestCase.assertTrue(DatabaseHandler.fetchArticlesByIdStarting(TrainingArticle.class, maxId - 1).size() > 0);
}
@Test
public void testGetRowCount() throws Exception {
int count = DatabaseHandler.getRowCount(TrainingArticle.class);
TestCase.assertTrue(count > 0);
}
}