package sagan.blog.support; import sagan.blog.Post; import sagan.blog.PostBuilder; import saganx.AbstractIntegrationTests; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.web.servlet.MvcResult; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; public class BlogIndex_BroadcastTests extends AbstractIntegrationTests { @Autowired private PostRepository postRepository; private int numberOfBlogPosts(Document html) { return html.select(".blog--title").size(); } private void createManyPostsInNovember(int numPostsToCreate) { Calendar calendar = Calendar.getInstance(); List<Post> posts = new ArrayList<>(); for (int postNumber = 1; postNumber <= numPostsToCreate; postNumber++) { calendar.set(2012, 10, postNumber); Post post = new PostBuilder().title("This week in Spring - November " + postNumber + ", 2012") .rawContent("Raw content") .renderedContent("Html content") .renderedSummary("Html summary") .isBroadcast() .createdAt(calendar.getTime()) .publishAt(calendar.getTime()) .build(); posts.add(post); } postRepository.save(posts); } @Test @Ignore // the broadcast category has been removed for the time being public void viewBroadcastBlogPosts() throws Exception { createManyPostsInNovember(2); postRepository.save(PostBuilder.post() .title("A non-broadcast post") .build()); postRepository.save(PostBuilder.post() .title("Another non-broadcast post") .build()); postRepository.save(PostBuilder.post() .title("Yet another") .build()); MvcResult response = mockMvc.perform(get("/blog/broadcasts")).andReturn(); Document html = Jsoup.parse(response.getResponse().getContentAsString()); assertThat(html.select(".blog-category.active").text(), equalTo("Broadcasts")); assertThat(numberOfBlogPosts(html), is(2)); assertThat(html.head().getElementsByAttributeValue("type", "application/atom+xml").get(0).attr("href"), equalTo("/blog/broadcasts.atom")); } @Test public void given1PageOfResults_blogIndexDoesNotShowPaginationControl() throws Exception { createManyPostsInNovember(1); MvcResult response = mockMvc.perform(get("/blog/broadcasts")).andReturn(); Document html = Jsoup.parse(response.getResponse().getContentAsString()); assertThat(html.select("#pagination_control").first(), is(nullValue())); } @Test public void givenManyPosts_blogIndexShowsPaginationControl() throws Exception { createManyPostsInNovember(21); MvcResult response = mockMvc.perform(get("/blog/broadcasts?page=2")).andReturn(); Document html = Jsoup.parse(response.getResponse().getContentAsString()); Element previousLink = html.select("#pagination_control a.previous").first(); assertThat("No previous pagination link found", previousLink, is(notNullValue())); String previousHref = previousLink.attributes().get("href"); assertThat(previousHref, is("/blog/broadcasts?page=1")); Element nextLink = html.select("#pagination_control a.next").first(); assertThat("No next pagination link found", nextLink, is(notNullValue())); String nextHref = nextLink.attributes().get("href"); assertThat(nextHref, is("/blog/broadcasts?page=3")); } }