package org.uned.agonzalo16.bitacora.dao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.uned.agonzalo16.bitacora.BaseDataStoreTest;
import org.uned.agonzalo16.bitacora.domain.Article;
import org.uned.agonzalo16.bitacora.domain.Blog;
import org.uned.agonzalo16.bitacora.domain.User;
import org.uned.agonzalo16.bitacora.domain.UserType;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring/applicationContext-test.xml")
public class ArticleDaoTest extends BaseDataStoreTest {
@Autowired
private ArticleDao articleDao;
@Autowired
private BlogDao blogDao;
@Autowired
private UserDao userDao;
private Blog createBlog() {
Blog blog = new Blog();
blog.setName("blog 1");
blog.setCreationDate(new Date());
blog.setDescription("description 1");
return blogDao.merge(blog);
}
private User createUser() {
User user = new User();
user.setActive(true);
user.setCreationDate(new Date());
user.setEmail("email@test.com");
user.setLocalization("Spain");
user.setPassword("password");
user.setType(UserType.VISITOR.getType());
user.setUsername("username");
user.setWebSite("www.site.com");
return userDao.merge(user);
}
@Test
public void testList() {
Blog blog = createBlog();
User user = createUser();
for (int i = 0; i < 100; i++) {
Article article = new Article();
article.setTitle("title " + i);
article.setCreationDate(new Date());
article.setText("text " + i);
article.setOpenComments(true);
article.setBlog(blog);
article.setUser(user);
articleDao.merge(article);
}
List<Article> allArticles = articleDao.findAll();
assertEquals("100 articles in datastore", allArticles.size(), 100);
}
@Test
public void testSave() {
Article article = new Article();
article.setTitle("title");
article.setCreationDate(new Date());
article.setText("text");
article.setOpenComments(true);
article.setBlog(createBlog());
article.setUser(createUser());
Article newArticle = articleDao.merge(article);
assertEquals("Id must be the same", article.getId(), newArticle.getId());
}
@Test
public void testDelete() {
Article article = new Article();
article.setTitle("title");
article.setCreationDate(new Date());
article.setText("text");
article.setOpenComments(true);
article.setBlog(createBlog());
article.setUser(createUser());
Article newArticle = articleDao.merge(article);
articleDao.delete(newArticle.getId());
assertNull("The entity has been deleted", articleDao.get(newArticle.getId()));
}
@Test
public void testFidByBlog() {
Blog blog1 = createBlog();
Blog blog2 = createBlog();
for (int i = 0; i < 10; i++) {
Article article = new Article();
article.setTitle("title " + i);
article.setCreationDate(new Date());
article.setText("text " + i);
article.setOpenComments(true);
article.setBlog(blog1);
article.setUser(createUser());
articleDao.merge(article);
}
for (int i = 10; i < 30; i++) {
Article article = new Article();
article.setTitle("title " + i);
article.setCreationDate(new Date());
article.setText("text " + i);
article.setOpenComments(true);
article.setBlog(blog2);
article.setUser(createUser());
articleDao.merge(article);
}
List<Article> blog1Articles = articleDao.findByBlog(blog1);
assertEquals("10 articles in blog 1", blog1Articles.size(), 10);
List<Article> blog2Articles = articleDao.findByBlog(blog2);
assertEquals("20 articles in blog 2", blog2Articles.size(), 20);
}
@Test
public void testDeleteBlogWithArticles() {
Blog blog1 = createBlog();
Blog blog2 = createBlog();
for (int i = 0; i < 10; i++) {
Article article = new Article();
article.setTitle("title " + i);
article.setCreationDate(new Date());
article.setText("text " + i);
article.setOpenComments(true);
article.setBlog(blog1);
articleDao.merge(article);
}
for (int i = 10; i < 30; i++) {
Article article = new Article();
article.setTitle("title " + i);
article.setCreationDate(new Date());
article.setText("text " + i);
article.setOpenComments(true);
article.setBlog(blog2);
articleDao.merge(article);
}
assertEquals("30 articles", articleDao.findAll().size(), 30);
blogDao.delete(blog1.getId());
assertEquals("20 articles", articleDao.findAll().size(), 20);
blogDao.delete(blog2.getId());
assertEquals("0 articles", articleDao.findAll().size(), 0);
}
@Test
public void testFidByUser() {
Blog blog = createBlog();
User user1 = createUser();
User user2 = createUser();
for (int i = 0; i < 10; i++) {
Article article = new Article();
article.setTitle("title " + i);
article.setCreationDate(new Date());
article.setText("text " + i);
article.setOpenComments(true);
article.setBlog(blog);
article.setUser(user1);
articleDao.merge(article);
}
for (int i = 10; i < 30; i++) {
Article article = new Article();
article.setTitle("title " + i);
article.setCreationDate(new Date());
article.setText("text " + i);
article.setOpenComments(true);
article.setBlog(blog);
article.setUser(user2);
articleDao.merge(article);
}
List<Article> user1Articles = articleDao.findByUser(user1);
assertEquals("10 articles for user 1", user1Articles.size(), 10);
List<Article> user2Articles = articleDao.findByUser(user2);
assertEquals("20 articles for user 2", user2Articles.size(), 20);
}
}