package sagan.blog.support;
import sagan.blog.Post;
import sagan.blog.PostMovedException;
import sagan.support.DateFactory;
import java.util.Collections;
import java.util.Locale;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.web.servlet.view.RedirectView;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.*;
public class BlogControllerTests {
@Mock
private BlogService blogService;
private BlogController blogController;
private DateFactory dateFactory = new DateFactory();
private Locale defaultLocale;
private ExtendedModelMap model = new ExtendedModelMap();
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
PageImpl<Post> page = new PageImpl<>(Collections.<Post> emptyList(), new PageRequest(1, 1), 1);
given(blogService.getPublishedPostsByDate(anyInt(), any(Pageable.class))).willReturn(page);
given(blogService.getPublishedPostsByDate(anyInt(), anyInt(), any(Pageable.class))).willReturn(page);
given(blogService.getPublishedPostsByDate(anyInt(), anyInt(), anyInt(), any(Pageable.class))).willReturn(
page);
blogController = new BlogController(blogService, dateFactory);
defaultLocale = Locale.getDefault();
Locale.setDefault(Locale.US);
}
@After
public void tearDown() {
Locale.setDefault(defaultLocale);
}
@Test
public void titleForBlogYearPage() throws Exception {
blogController.listPublishedPostsForYear(2013, 1, model);
String title = (String) model.get("title");
assertThat(title, equalTo("Archive for 2013"));
}
@Test
public void titleForBlogYearMonthPage() throws Exception {
blogController.listPublishedPostsForYearAndMonth(2013, 1, 1, model);
String title = (String) model.get("title");
assertThat(title, equalTo("Archive for January 2013"));
}
@Test
public void titleForBlogYearMonthDayPage() throws Exception {
blogController.listPublishedPostsForDate(2011, 3, 23, 1, model);
String title = (String) model.get("title");
assertThat(title, equalTo("Archive for March 23, 2011"));
}
@Test
public void handleBlogPostMovedExceptionRedirects() {
String publicSlug = "slug";
RedirectView result = blogController.handle(new PostMovedException(publicSlug));
assertThat(result.getUrl(), equalTo("/blog/" + publicSlug));
}
}