/*
* 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.junit.Assert.*;
import java.util.Date;
import java.util.List;
import net.jforum.entities.Forum;
import net.jforum.entities.Post;
import net.jforum.entities.PostReport;
import net.jforum.entities.PostReportStatus;
import net.jforum.entities.Topic;
import net.jforum.entities.User;
import net.jforum.repository.PostReportRepository;
import net.jforum.util.JDBCLoader;
import org.junit.Test;
/**
* @author Rafael Steil
*/
public class PostReportDAOTestCase extends AbstractDAOTestCase<PostReport> {
@Test
@SuppressWarnings("deprecation")
public void countPendingReportsShouldFilterByForum() {
new JDBCLoader(this.session()).run("/postreport/countPendingReports.sql");
PostReportRepository dao = this.newDAO();
assertEquals(1, dao.countPendingReports(1));
}
@Test
@SuppressWarnings("deprecation")
public void countPendingReportsWithoutFilteringShouldReturnAllResultsExceptResolved() {
new JDBCLoader(this.session()).run("/postreport/countPendingReports.sql");
PostReportRepository dao = this.newDAO();
assertEquals(2, dao.countPendingReports());
}
@Test
@SuppressWarnings("deprecation")
public void getAllShouldFilterByForumExpectOneResult() {
new JDBCLoader(this.session()).run("/postreport/getAll.sql");
PostReport report = this.createPostReport(1, 1, PostReportStatus.UNRESOLVED);
this.createPostReport(2, 2, PostReportStatus.UNRESOLVED);
List<PostReport> reports = this.getAll(1, 1);
this.assertPostReport(report, reports.get(0));
}
@Test
@SuppressWarnings("deprecation")
public void getAllResolvedReports() {
new JDBCLoader(this.session()).run("/postreport/getAll.sql");
this.createPostReport(1, 1, PostReportStatus.UNRESOLVED);
PostReport report1 = this.createPostReport(2, 2, PostReportStatus.RESOLVED);
PostReport report2 = this.createPostReport(2, 2, PostReportStatus.RESOLVED);
PostReportRepository dao = this.newDAO();
List<PostReport> reports = dao.getAll(PostReportStatus.RESOLVED, null);
assertEquals(2, reports.size());
this.assertPostReport(report1, reports.get(0));
this.assertPostReport(report2, reports.get(1));
}
@Test
@SuppressWarnings("deprecation")
public void getAllWithoutFilterShouldReturnAllReults() {
new JDBCLoader(this.session()).run("/postreport/getAll.sql");
PostReport report = this.createPostReport(1, 1, PostReportStatus.UNRESOLVED);
PostReport report2 = this.createPostReport(1, 2, PostReportStatus.UNRESOLVED);
List<PostReport> reports = this.getAll(2, null);
this.assertPostReport(report, reports.get(0));
this.assertPostReport(report2, reports.get(1));
}
private List<PostReport> getAll(int expectedCount, int... forumIds) {
PostReportRepository dao = this.newDAO();
List<PostReport> reports = dao.getAll(PostReportStatus.UNRESOLVED, forumIds);
assertEquals(expectedCount, reports.size());
return reports;
}
private void assertPostReport(PostReport report, PostReport report2) {
assertEquals(report.getPost().getId(), report2.getPost().getId());
assertEquals(report.getPost().getTopic().getId(), report2.getPost().getTopic().getId());
assertEquals(report.getDate(), report2.getDate());
assertEquals(report.getDescription(), report2.getDescription());
assertEquals(report.getPost().getSubject(), report2.getPost().getSubject());
assertEquals(report.getPost().getUser().getId(), report2.getPost().getUser().getId());
assertEquals(report.getUser().getId(), report2.getUser().getId());
}
private PostReport createPostReport(int forumId, int postId, PostReportStatus status) {
PostReport report = new PostReport();
report.setDate(new Date());
report.setDescription("description");
report.setPost(new Post());
report.getPost().setId(postId);
report.getPost().setForum(new Forum());
report.getPost().getForum().setId(forumId);
report.getPost().setTopic(new Topic());
report.getPost().getTopic().setId(1);
report.getPost().setUser(new User());
report.getPost().getUser().setId(1);
report.setUser(new User());
report.getUser().setId(1);
report.setStatus(status);
PostReportRepository dao = this.newDAO();
this.insert(report, dao);
return report;
}
private PostReportRepository newDAO() {
return new PostReportRepository(session());
}
}