Package fr.ippon.tatami.web.syndic

Source Code of fr.ippon.tatami.web.syndic.SyndicTimelineControllerTest

package fr.ippon.tatami.web.syndic;

import com.fasterxml.jackson.databind.ObjectMapper;
import fr.ippon.tatami.AbstractCassandraTatamiTest;
import fr.ippon.tatami.domain.User;
import fr.ippon.tatami.security.AuthenticationService;
import fr.ippon.tatami.service.StatusUpdateService;
import fr.ippon.tatami.service.TimelineService;
import fr.ippon.tatami.service.UserService;
import fr.ippon.tatami.service.dto.StatusDTO;
import fr.ippon.tatami.web.rest.AccountController;
import fr.ippon.tatami.web.rest.TimelineController;
import fr.ippon.tatami.web.rest.dto.Preferences;
import org.apache.commons.lang.CharEncoding;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.http.MediaType;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.servlet.ModelAndView;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Locale;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

public class SyndicTimelineControllerTest extends AbstractCassandraTatamiTest {

    @Inject
    private TimelineService timelineService;

    @Inject
    private StatusUpdateService statusUpdateService;

    @Inject
    private UserService userService;

    @Inject
    Environment env;

    private MockMvc mockMvc;

    private MockMvc timelineMockMvc;

    private MockMvc accountMockMvc;

    private static final String username = "timelineUser";

    @Before
    public void setup() {

        TimelineController timelineController = new TimelineController();
        ReflectionTestUtils.setField(timelineController, "timelineService", timelineService);
        ReflectionTestUtils.setField(timelineController, "statusUpdateService", statusUpdateService);

        User authenticateUser = constructAUser(username + "@ippon.fr");
        AuthenticationService mockAuthenticationService = mock(AuthenticationService.class);
        when(mockAuthenticationService.getCurrentUser()).thenReturn(authenticateUser);
        ReflectionTestUtils.setField(timelineController, "authenticationService", mockAuthenticationService);
        ReflectionTestUtils.setField(userService, "authenticationService", mockAuthenticationService);
        ReflectionTestUtils.setField(timelineService, "authenticationService", mockAuthenticationService);
        ReflectionTestUtils.setField(statusUpdateService, "authenticationService", mockAuthenticationService);
        this.timelineMockMvc = MockMvcBuilders.standaloneSetup(timelineController).build();

        AccountController accountController = new AccountController();
        ReflectionTestUtils.setField(accountController, "userService", userService);
        ReflectionTestUtils.setField(accountController, "env", env);
        ReflectionTestUtils.setField(accountController, "authenticationService", mockAuthenticationService);
        this.accountMockMvc = MockMvcBuilders.standaloneSetup(accountController).build();

        SyndicTimelineController syndicTimelineController = new SyndicTimelineController();
        ReflectionTestUtils.setField(syndicTimelineController, "timelineService", timelineService);
        ReflectionTestUtils.setField(syndicTimelineController, "userService", userService);

        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("file:src/main/webapp/WEB-INF/messages/messages");
        messageSource.setDefaultEncoding(CharEncoding.UTF_8);
        ReflectionTestUtils.setField(syndicTimelineController, "messageSource", messageSource);
        this.mockMvc = MockMvcBuilders.standaloneSetup(syndicTimelineController).build();
    }

    @Test
    @SuppressWarnings("unchecked")
    public void testStatusUpdate() throws Exception {
        LocaleContextHolder.setLocale(Locale.US);

        // Post content
        timelineMockMvc.perform(post("/rest/statuses/")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"content\":\"Test status for RSS syndication\"}"))
                .andExpect(status().isOk());

        // Get a RSS stream that is not correct

        mockMvc.perform(get("/syndic/12345"))
                .andExpect(status().isNotFound());

        // Enable RSS for this user
        org.springframework.security.core.userdetails.User userDetails =
                new org.springframework.security.core.userdetails.User(username, "", new ArrayList<GrantedAuthority>());

        Authentication authentication =
                new UsernamePasswordAuthenticationToken(userDetails,
                        userDetails.getPassword(),
                        userDetails.getAuthorities());

        SecurityContextHolder.getContext().setAuthentication(authentication);
        accountMockMvc.perform(post("/rest/account/preferences")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"mentionEmail\":true," +
                        "\"weeklyDigest\":false," +
                        "\"dailyDigest\":false," +
                        "\"rssUidActive\":true," +
                        "\"rssUid\":\"\"}"))
                .andExpect(status().isOk());

        //Get RSS ID
        String preferencesAsJson = accountMockMvc.perform(get("/rest/account/preferences")
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().contentType("application/json"))
                .andExpect(jsonPath("$.rssUidActive").value(true))
                .andReturn().getResponse().getContentAsString();

        Preferences preferences = new ObjectMapper().readValue(preferencesAsJson, Preferences.class);

        String rssId = preferences.getRssUid();

        ModelAndView result = mockMvc.perform(get("/syndic/" + rssId))
                .andExpect(status().isOk())
                .andReturn().getModelAndView();

        Collection<StatusDTO> statuses = (Collection<StatusDTO>) result.getModel().get("feedContent");
        assertEquals("Test status for RSS syndication", statuses.iterator().next().getContent());

    }
}
TOP

Related Classes of fr.ippon.tatami.web.syndic.SyndicTimelineControllerTest

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.