Package sagan.blog.support

Source Code of sagan.blog.support.ViewBlogPostsByDateTests

package sagan.blog.support;

import sagan.blog.Post;
import sagan.blog.PostBuilder;
import sagan.blog.PostCategory;
import saganx.AbstractIntegrationTests;

import java.text.ParseException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.Before;
import org.junit.Test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MvcResult;

import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

public class ViewBlogPostsByDateTests extends AbstractIntegrationTests {
    @Autowired
    private PostRepository postRepository;

    private Post post1, post2, post3;

    @Before
    public void setup() throws ParseException {
        post1 = PostBuilder.post()
                .publishAt("2013-04-01 11:00")
                .title("Title 1")
                .rawContent("Content")
                .category(PostCategory.ENGINEERING).build();
        postRepository.save(post1);

        post2 = PostBuilder.post()
                .publishAt("2013-04-02 11:00")
                .title("Title 2")
                .rawContent("Content")
                .category(PostCategory.ENGINEERING).build();
        postRepository.save(post2);

        post3 = PostBuilder.post()
                .publishAt("2013-03-02 11:00")
                .title("Title 3")
                .rawContent("Content")
                .category(PostCategory.ENGINEERING).build();
        postRepository.save(post3);

        Post oldPost = PostBuilder.post()
                .publishAt("2012-04-01 11:00")
                .title("Old Post")
                .rawContent("Content")
                .category(PostCategory.ENGINEERING).build();
        postRepository.save(oldPost);

    }

    @Test
    public void getDateReturnsPostsForDate() throws Exception {
        mockMvc.perform(get("/blog/2013/04/01"))
                .andExpect(status().isOk())
                .andExpect(content().contentTypeCompatibleWith("text/html"))
                .andExpect(content().string(containsString("Title 1")))
                .andExpect(content().string(not(containsString("Title 2"))))
                .andExpect(content().string(not(containsString("Title 3"))))
                .andExpect(content().string(not(containsString("Old Post"))));
    }

    @Test
    public void getMonthReturnsPostsForMonth() throws Exception {
        mockMvc.perform(get("/blog/2013/04"))
                .andExpect(status().isOk())
                .andExpect(content().contentTypeCompatibleWith("text/html"))
                .andExpect(content().string(containsString("Title 1")))
                .andExpect(content().string(containsString("Title 2")))
                .andExpect(content().string(not(containsString("Title 3"))))
                .andExpect(content().string(not(containsString("Old Post"))));
    }

    @Test
    public void getMonthReturnsPostsForYear() throws Exception {
        mockMvc.perform(get("/blog/2013"))
                .andExpect(status().isOk())
                .andExpect(content().contentTypeCompatibleWith("text/html"))
                .andExpect(content().string(containsString("Title 1")))
                .andExpect(content().string(containsString("Title 2")))
                .andExpect(content().string(containsString("Title 3")))
                .andExpect(content().string(not(containsString("Old Post"))));
    }

    @Test
    public void givenManyPosts_blogYearMonthDayIndexShowsPaginationControl() throws Exception {
        for (int i = 0; i < 24; ++i) {
            Post post = PostBuilder.post()
                    .publishAt(String.format("2012-11-02 %02d:00", i))
                    .title(String.format("Title %d", i))
                    .rawContent("Content")
                    .category(PostCategory.ENGINEERING).build();
            postRepository.save(post);
        }

        MvcResult response = mockMvc.perform(get("/blog/2012/11/02?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/2012/11/02?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/2012/11/02?page=3"));
    }

    @Test
    public void givenManyPosts_blogYearMonthIndexShowsPaginationControl() throws Exception {
        for (int i = 1; i < 25; ++i) {
            Post post = PostBuilder.post()
                    .publishAt(String.format("2012-06-%02d 11:00", i))
                    .title(String.format("Title %d", i))
                    .rawContent("Content")
                    .category(PostCategory.ENGINEERING).build();
            postRepository.save(post);
        }

        MvcResult response = mockMvc.perform(get("/blog/2012/06?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/2012/06?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/2012/06?page=3"));
    }

    @Test
    public void givenManyPosts_blogYearIndexShowsPaginationControl() throws Exception {
        for (int i = 1; i < 25; ++i) {
            Post post = PostBuilder.post()
                    .publishAt(String.format("2012-11-%02d 11:00", i))
                    .title(String.format("Title %d", i))
                    .rawContent("Content")
                    .category(PostCategory.ENGINEERING).build();
            postRepository.save(post);
        }

        MvcResult response = mockMvc.perform(get("/blog/2012?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/2012?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/2012?page=3"));
    }

}
TOP

Related Classes of sagan.blog.support.ViewBlogPostsByDateTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.