Package sagan.team.support

Source Code of sagan.team.support.ViewTeamMemberTests

package sagan.team.support;

import sagan.blog.Post;
import sagan.blog.PostBuilder;
import sagan.blog.support.PostRepository;
import sagan.team.MemberProfile;
import sagan.team.MemberProfileBuilder;
import saganx.AbstractIntegrationTests;

import java.text.ParseException;
import java.util.List;

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.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static java.util.stream.Collectors.toList;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
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 ViewTeamMemberTests extends AbstractIntegrationTests {
    @Autowired
    private WebApplicationContext wac;

    @Autowired
    private TeamRepository teamRepository;

    @Autowired
    private PostRepository postRepository;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }

    @Test
    public void getTeamMemberPage() throws Exception {
        MemberProfile profile = new MemberProfile();
        profile.setName("First Last");
        profile.setGithubUsername("someguy");
        profile.setUsername("someguy");

        teamRepository.save(profile);

        mockMvc.perform(get("/team/someguy"))
                .andExpect(status().isOk())
                .andExpect(content().contentTypeCompatibleWith("text/html"))
                .andExpect(content().string(containsString("First Last")))
                .andExpect(content().string(containsString("someguy")));
    }

    @Test
    public void getTeamMemberPage_404sWhenNoMemberFound() throws Exception {
        mockMvc.perform(get("/team/not-a-user")).andExpect(status().isNotFound());
    }

    @Test
    public void getTeamMemberPage_404sWhenMemberIsHidden() throws Exception {
        MemberProfile profile = new MemberProfile();
        profile.setName("Hidden User");
        profile.setGithubUsername("hidden-user");
        profile.setUsername("hidden-user");
        profile.setHidden(true);

        teamRepository.save(profile);

        mockMvc.perform(get("/team/hidden-user")).andExpect(status().isNotFound());
    }

    @Test
    public void getTeamMemberPageShowsPosts() throws Exception {
        MemberProfile profile = new MemberProfile();
        profile.setName("First Last");
        profile.setGithubUsername("someguy");
        profile.setUsername("someguy");

        teamRepository.save(profile);

        Post post = PostBuilder.post().author(profile).title("My Post").build();
        postRepository.save(post);

        mockMvc.perform(get("/team/someguy"))
                .andExpect(status().isOk())
                .andExpect(content().contentTypeCompatibleWith("text/html"))
                .andExpect(content().string(containsString("My Post")));
    }

    @Test
    public void getNonExistentTeamMemberPage() throws Exception {
        mockMvc.perform(get("/team/someguy")).andExpect(status().isNotFound());
    }

    @Test
    public void getTeamMemberPageForNameWithDashes() throws Exception {
        MemberProfile profile = new MemberProfile();
        profile.setName("First Last");
        profile.setGithubUsername("some-guy");
        profile.setUsername("some-guy");

        teamRepository.save(profile);

        mockMvc.perform(get("/team/some-guy"))
                .andExpect(status().isOk())
                .andExpect(content().contentTypeCompatibleWith("text/html"))
                .andExpect(content().string(containsString("First Last")))
                .andExpect(content().string(containsString("some-guy")));
    }

    @Test
    public void givenPostsCreatedOutOfOrder_authorsPostsShownOrderedByPublishedDate() throws Exception {
        MemberProfile activeAuthor = MemberProfileBuilder.profile().username("active_author").build();
        createAuthoredPost(activeAuthor, "Happy New Year", "2013-01-01 00:00");
        createAuthoredPost(activeAuthor, "Back to Work", "2013-01-03 00:00");
        createAuthoredPost(activeAuthor, "Off to the Sales", "2013-01-02 00:00");

        MvcResult response = mockMvc.perform(get("/team/active_author")).andExpect(status().isOk()).andReturn();

        Document html = Jsoup.parse(response.getResponse().getContentAsString());
        List<String> titles = html.select(".member-post--title").stream()
                .map(Element::text).collect(toList());
        assertThat(titles, contains("Back to Work", "Off to the Sales", "Happy New Year"));
    }

    private Post createAuthoredPost(MemberProfile author, String title, String publishAt) throws ParseException {
        Post post = PostBuilder.post().author(author).title(title).publishAt(publishAt).build();
        return postRepository.save(post);
    }

}
TOP

Related Classes of sagan.team.support.ViewTeamMemberTests

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.