/*
* 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.actions.helpers;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import net.jforum.entities.Forum;
import net.jforum.entities.Topic;
import net.jforum.entities.util.Pagination;
import net.jforum.util.ConfigKeys;
import net.jforum.util.JForumConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author Rafael Steil, Jonatan Cloutier
*/
@RunWith(MockitoJUnitRunner.class)
public class PaginationTestCase {
@Test
public void pagination1() {
Pagination p = this.newPagination(5, 20, 0);
assertEquals(1, p.getThisPage());
assertEquals(4, p.getTotalPages());
}
@Test
public void pagination2() {
Pagination p = this.newPagination(5, 19, 0);
assertEquals(4, p.getTotalPages());
}
@Test
public void pagination3() {
Pagination p = this.newPagination(3, 30, 0);
assertEquals(10, p.getTotalPages());
}
@Test
public void pagination4() {
Pagination p = this.newPagination(3, 31, 0);
assertEquals(11, p.getTotalPages());
}
@Test
public void pagination5() {
Pagination p = this.newPagination(7, 543, 0);
assertEquals(78, p.getTotalPages());
}
@Test
public void pageShouldNotBeBiggerThanTotalPages() {
Pagination p = this.newPagination(10, 50, 100);
assertEquals(p.getTotalPages(), p.getThisPage());
}
@Test
public void pageZeroThisPageShouldBeOne() {
Pagination p = this.newPagination(30, 100, 0);
assertEquals(1, p.getThisPage());
}
@Test
public void pageZeroStartShouldBeZero() {
Pagination p = this.newPagination(30, 100, 0);
assertEquals(0, p.getStart());
}
@Test
public void pageOneStartShouldBeZero() {
Pagination p = this.newPagination(30, 100, 1);
assertEquals(0, p.getStart());
}
@Test
public void pageTwoStartShouldBeProportional() {
Pagination p = this.newPagination(30, 100, 2);
assertEquals(30, p.getStart());
}
@Test
public void forForum() {
final Forum forum = mock(Forum.class);
final JForumConfig config = mock(JForumConfig.class);
when(config.getInt(ConfigKeys.TOPICS_PER_PAGE)).thenReturn(10);
when(forum.getTotalTopics()).thenReturn(50);
when(forum.getId()).thenReturn(1);
Pagination p = new Pagination(config, 3).forForum(forum);
assertEquals(10, p.getRecordsPerPage());
assertEquals(50, p.getTotalRecords());
assertEquals(5, p.getTotalPages());
assertEquals(3, p.getThisPage());
assertEquals(20, p.getStart());
assertEquals(String.format("/%s/%s", Domain.FORUMS, Actions.SHOW), p.getBaseUrl());
}
@Test
public void forTopic() {
final Topic topic = mock(Topic.class);
final JForumConfig config = mock(JForumConfig.class);
when(config.getInt(ConfigKeys.POSTS_PER_PAGE)).thenReturn(10);
when(topic.getTotalPosts()).thenReturn(50);
when(topic.getId()).thenReturn(1);
Pagination p = new Pagination(config, 3).forTopic(topic);
assertEquals(10, p.getRecordsPerPage());
assertEquals(50, p.getTotalRecords());
assertEquals(5, p.getTotalPages());
assertEquals(3, p.getThisPage());
assertEquals(20, p.getStart());
assertEquals(String.format("/%s/%s", Domain.TOPICS, Actions.LIST), p.getBaseUrl());
}
private Pagination newPagination(int recordsPerPage, int totalRecords, int page) {
return new Pagination(totalRecords, recordsPerPage, page, "", 0);
}
}