/*
* Copyright (c) JForum Team. All rights reserved.
*
* The software in this package is published under the terms of the LGPL
* license a copy of which has been included with this distribution in the
* license.txt file.
*
* The JForum Project
* http://www.jforum.net
*/
package net.jforum.core.hibernate;
import static org.mockito.Mockito.*;
import java.util.Calendar;
import java.util.List;
import net.jforum.entities.Category;
import net.jforum.entities.Forum;
import net.jforum.entities.Group;
import net.jforum.entities.Post;
import net.jforum.entities.Topic;
import net.jforum.entities.util.PaginatedResult;
import net.jforum.repository.CategoryRepository;
import net.jforum.repository.ForumRepository;
import net.jforum.repository.PostRepository;
import net.jforum.util.ConfigKeys;
import net.jforum.util.JDBCLoader;
import net.jforum.util.JForumConfig;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author Rafael Steil, Jonatan Cloutier
*/
@RunWith(MockitoJUnitRunner.class)
public class ForumDAOTestCase extends AbstractDAOTestCase<Forum> {
@Test
@SuppressWarnings("deprecation")
public void moveTopics() {
new JDBCLoader(session())
.run("/forumdao/moveTopics.sql");
ForumRepository dao = this.newForumDao();
Forum toForum = dao.get(2);
Assert.assertEquals(1, dao.getTotalTopics(toForum));
Assert.assertEquals(1, dao.getTotalPosts(toForum));
dao.moveTopics(toForum, 1);
Assert.assertEquals(2, dao.getTotalTopics(toForum));
Assert.assertEquals(2, dao.getTotalPosts(toForum));
}
@Test
@SuppressWarnings("deprecation")
public void getNewMessages() {
new JDBCLoader(session())
.run("/forumdao/getNewMessages.sql");
Calendar from = Calendar.getInstance();
from.set(2008, 5, 11, 14, 50);
ForumRepository dao = this.newForumDao();
PaginatedResult<Topic> messages = dao.getNewMessages(from.getTime(), 0, 3);
Assert.assertEquals(3, messages.getResults().size());
Assert.assertEquals(5, messages.getTotalRecords());
}
@Test
@SuppressWarnings("deprecation")
public void getModerators() {
new JDBCLoader(session())
.run("/forumdao/getModerators.sql");
Forum forum = new Forum(); forum.setId(1);
List<Group> moderators = this.newForumDao().getModerators(forum);
Assert.assertEquals(2, moderators.size());
Assert.assertTrue(moderators.contains(new Group() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(1); }}));
Assert.assertTrue(moderators.contains(new Group() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(2); }}));
}
@Test
@SuppressWarnings("deprecation")
public void getLastPost() {
new JDBCLoader(session())
.run("/topicdao/firstLastPost.sql");
ForumRepository dao = this.newForumDao();
Forum f = new Forum(); f.setId(1);
Post expectedFirst = new Post(); expectedFirst.setId(2);
Assert.assertEquals(expectedFirst, dao.getLastPost(f));
}
@Test
@SuppressWarnings("deprecation")
public void getLastPostShouldIgnorePendingModerationPost() {
new JDBCLoader(session())
.run("/forumdao/getLastPostShouldIgnorePendingModerationPost.sql");
ForumRepository dao = this.newForumDao();
Forum forum = dao.get(1);
Post expected = new Post(); expected.setId(2);
Assert.assertEquals(expected, dao.getLastPost(forum));
}
@Test
@SuppressWarnings("deprecation")
public void getTopicsShouldIgnoreModeratedExpectThreeResults() {
this.createGetTopicsPosts();
new JDBCLoader(session())
.run("/forumdao/getTopicsShouldIgnoreModeratedExpectThreeResults.sql");
ForumRepository dao = this.newForumDao();
Forum forum = dao.get(1);
List<Topic> topics = dao.getTopics(forum, 0, 10);
Assert.assertEquals(3, topics.size());
Assert.assertEquals("t1.3", topics.get(0).getSubject());
Assert.assertEquals("t1.2", topics.get(1).getSubject());
Assert.assertEquals("t1.1", topics.get(2).getSubject());
}
@Test
public void getTopicsPendingModerationExpectTwoResults() {
this.createGetTopicsPosts();
ForumRepository dao = this.newForumDao();
Forum forum = dao.get(1);
List<Topic> moderatedTopics = dao.getTopicsPendingModeration(forum);
Assert.assertEquals(2, moderatedTopics.size());
Assert.assertEquals("t1.1", moderatedTopics.get(0).getSubject());
Assert.assertEquals("t1.2", moderatedTopics.get(1).getSubject());
Assert.assertEquals(2, moderatedTopics.get(0).getPosts().size());
Assert.assertEquals(1, moderatedTopics.get(1).getPosts().size());
}
@Test
public void insertShouldIncrementDisplayOrder() {
Forum f1 = this.newForum();
Forum f2 = this.newForum();
ForumRepository dao = this.newForumDao();
this.insert(f1, dao);
this.insert(f2, dao);
Assert.assertEquals(1, f1.getDisplayOrder());
Assert.assertEquals(2, f2.getDisplayOrder());
}
@Test
public void getTotalMessage() {
ForumRepository forumDao = this.newForumDao();
PostRepository postDao = this.newPostDao();
Post p = new Post(); p.setText("x"); p.setSubject("y");
postDao.add(p);
Assert.assertEquals(1, forumDao.getTotalMessages());
}
@Test
@SuppressWarnings("deprecation")
public void getTotalPosts() {
new JDBCLoader(session())
.run("/forumdao/getTotalPosts.sql");
ForumRepository dao = this.newForumDao();
Forum forum = dao.get(1);
int totalPosts = dao.getTotalPosts(forum);
Assert.assertEquals(2, totalPosts);
}
@Test
@SuppressWarnings("deprecation")
public void getTopicsShouldFetchFromForumAndFromMovedIdExpectTwoResults() {
new JDBCLoader(session())
.run("/forumdao/getTopicsShouldFetchFromForumAndFromMovedIdExpectTwoResults.sql");
ForumRepository dao = this.newForumDao();
Forum forum = new Forum(); forum.setId(1);
List<Topic> topics = dao.getTopics(forum, 0, 10);
Assert.assertEquals(2, topics.size());
}
@Test
@SuppressWarnings("deprecation")
public void getTopicsShouldIgnoreMovedIdExpectOneResult() {
new JDBCLoader(session())
.run("/forumdao/getTopicsShouldFetchFromForumAndFromMovedIdExpectTwoResults.sql");
final JForumConfig config = mock(JForumConfig.class);
when(config.getBoolean(ConfigKeys.QUERY_IGNORE_TOPIC_MOVED)).thenReturn(true);
ForumRepository dao = this.newForumDao();
dao.setJforumConfig(config);
Forum forum = new Forum(); forum.setId(1);
List<Topic> topics = dao.getTopics(forum, 0, 10);
Assert.assertEquals(1, topics.size());
}
@Test
@SuppressWarnings("deprecation")
public void getTotalTopicsShouldFetchOnlyNonModeratedExpectTwoResults() {
new JDBCLoader(session())
.run("/forumdao/getTotalTopics.sql");
Forum forum = new Forum(this.newForumDao()); forum.setId(1);
Assert.assertEquals(2, forum.getTotalTopics());
}
@Test
public void insert() {
ForumRepository dao = this.newForumDao();
Forum f = newForum();
this.insert(f, dao);
Assert.assertTrue(f.getId() > 0);
Forum loaded = dao.get(f.getId());
Assert.assertEquals("desc1", loaded.getDescription());
Assert.assertEquals("forum1", loaded.getName());
Assert.assertEquals(false, loaded.isModerated());
Assert.assertEquals(1, loaded.getDisplayOrder());
Assert.assertNotNull(loaded.getCategory());
Assert.assertEquals(f.getCategory().getId(), loaded.getCategory().getId());
Assert.assertNull(f.getLastPost());
}
@Test
public void update() {
ForumRepository dao = this.newForumDao();
Forum f = newForum();
this.insert(f, dao);
f = dao.get(f.getId());
// We'll change the category as well
Category c = new Category(); c.setName("c2");
CategoryRepository categoryDao = new CategoryRepository(session());
categoryDao.add(c);
f.setName("changed");
f.setDescription("changed description");
f.setModerated(true);
f.setDisplayOrder(6);
f.setCategory(c);
this.update(f, dao);
Forum loaded = dao.get(f.getId());
Assert.assertEquals(f.getName(), loaded.getName());
Assert.assertEquals(f.getDescription(), loaded.getDescription());
Assert.assertEquals(f.isModerated(), loaded.isModerated());
Assert.assertEquals(f.getDisplayOrder(), loaded.getDisplayOrder());
Assert.assertEquals(f.getCategory().getId(), loaded.getCategory().getId());
}
private Forum newForum() {
Forum f = new Forum();
f.setDescription("desc1");
f.setModerated(false);
f.setName("forum1");
f.setDisplayOrder(1);
// Create the category before creating the forum
CategoryRepository categoryDao = new CategoryRepository(session());
Category c = new Category();
c.setName("c1");
categoryDao.add(c);
f.setCategory(c);
return f;
}
private ForumRepository newForumDao() {
return new ForumRepository(session());
}
private PostRepository newPostDao() {
return new PostRepository(session());
}
@SuppressWarnings("deprecation")
private void createGetTopicsPosts() {
new JDBCLoader(session())
.run("/forumdao/getTopics.sql");
// Topic 1
PostRepository postDao = this.newPostDao();
Post p1 = new Post(); p1.setSubject("p1.1"); p1.setTopic(new Topic() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(1); }}); p1.setModerate(false);
Post p2 = new Post(); p2.setSubject("p1.2"); p2.setTopic(new Topic() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(1); }}); p2.setModerate(true);
Post p3 = new Post(); p3.setSubject("p1.3"); p3.setTopic(new Topic() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(1); }}); p3.setModerate(true);
postDao.add(p1); postDao.add(p2); postDao.add(p3);
// Topic 2
Post p4 = new Post(); p4.setSubject("p2.1"); p4.setTopic(new Topic() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(2); }}); p4.setModerate(false);
Post p5 = new Post(); p5.setSubject("p2.2"); p5.setTopic(new Topic() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(2); }}); p5.setModerate(true);
postDao.add(p4); postDao.add(p5);
// Topic 3
Post p6 = new Post(); p6.setSubject("p3.1"); p6.setTopic(new Topic() {/**
*
*/
private static final long serialVersionUID = 1L;
{ setId(3); }}); p6.setModerate(false);
postDao.add(p6);
this.commit();
this.beginTransaction();
}
}