org.cloudfoundry.identity.uaa.login.RemoteUaaControllerMockMvcTests.java Source code

Java tutorial

Introduction

Here is the source code for org.cloudfoundry.identity.uaa.login.RemoteUaaControllerMockMvcTests.java

Source

/*******************************************************************************
 *     Cloud Foundry 
 *     Copyright (c) [2009-2014] Pivotal Software, Inc. All Rights Reserved.
 *
 *     This product is licensed to you under the Apache License, Version 2.0 (the "License").
 *     You may not use this product except in compliance with the License.
 *
 *     This product includes a number of subcomponents with
 *     separate copyright notices and license terms. Your use of these
 *     subcomponents is subject to the terms and conditions of the
 *     subcomponent's license, as noted in the LICENSE file.
 *******************************************************************************/
package org.cloudfoundry.identity.uaa.login;

import static org.hamcrest.Matchers.hasKey;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
import static org.springframework.http.HttpMethod.GET;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.http.MediaType.TEXT_HTML;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.header;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;

import org.cloudfoundry.identity.uaa.authentication.login.Prompt;
import org.junit.Test;
import org.springframework.mock.env.MockEnvironment;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import java.util.Arrays;

public class RemoteUaaControllerMockMvcTests {

    @Test
    public void testLoginWithExplicitPrompts() throws Exception {
        RemoteUaaController controller = new RemoteUaaController(new MockEnvironment(), new RestTemplate());
        Prompt first = new Prompt("how", "text", "How did I get here?");
        Prompt second = new Prompt("where", "password", "Where does that highway go to?");
        controller.setPrompts(Arrays.asList(first, second));

        MockMvc mockMvc = getMockMvc(controller);

        mockMvc.perform(get("/login").accept(APPLICATION_JSON)).andExpect(status().isOk())
                .andExpect(view().name("login")).andExpect(model().attribute("prompts", hasKey("how")))
                .andExpect(model().attribute("prompts", hasKey("where")))
                .andExpect(model().attribute("prompts", not(hasKey("password"))));
    }

    @Test
    public void testLoginWithRemoteUaaPrompts() throws Exception {
        RestTemplate restTemplate = new RestTemplate();
        RemoteUaaController controller = new RemoteUaaController(new MockEnvironment(), restTemplate);
        controller.setUaaBaseUrl("https://uaa.example.com");

        MockMvc mockMvc = getMockMvc(controller);

        MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
        mockServer.expect(requestTo("https://uaa.example.com/login")).andExpect(method(GET))
                .andExpect(header("Accept", APPLICATION_JSON_VALUE))
                .andRespond(withSuccess("{\n" + "    \"prompts\": {\n" + "        \"how\": [\n"
                        + "            \"text\",\n" + "            \"Made-up field.\"\n" + "        ],\n"
                        + "        \"passcode\": [\n" + "            \"password\",\n"
                        + "            \"Passcode should not be filtered out in API.\"\n" + "        ]\n"
                        + "    }\n" + "}", APPLICATION_JSON));

        mockMvc.perform(get("/login").accept(APPLICATION_JSON)).andExpect(status().isOk())
                .andExpect(view().name("login")).andExpect(model().attribute("prompts", hasKey("how")))
                .andExpect(model().attribute("prompts", hasKey("passcode")))
                .andExpect(model().attribute("prompts", not(hasKey("password"))));
    }

    @Test
    public void testLoginWithDefaultPrompts() throws Exception {
        RestTemplate restTemplate = new RestTemplate();
        RemoteUaaController controller = new RemoteUaaController(new MockEnvironment(), restTemplate);
        controller.setUaaBaseUrl("https://uaa.example.com");

        MockMvc mockMvc = getMockMvc(controller);

        MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
        mockServer.expect(requestTo("https://uaa.example.com/login")).andExpect(method(GET))
                .andExpect(header("Accept", APPLICATION_JSON_VALUE)).andRespond(withSuccess("", APPLICATION_JSON));

        mockMvc.perform(get("/login").accept(APPLICATION_JSON)).andExpect(status().isOk())
                .andExpect(view().name("login")).andExpect(model().attribute("prompts", hasKey("username")))
                .andExpect(model().attribute("prompts", hasKey("password")));
    }

    @Test
    public void testDefaultSignupLink() throws Exception {
        RemoteUaaController controller = new RemoteUaaController(new MockEnvironment(), new RestTemplate());
        Prompt first = new Prompt("how", "text", "How did I get here?");
        Prompt second = new Prompt("where", "password", "Where does that highway go to?");
        controller.setPrompts(Arrays.asList(first, second));

        MockMvc mockMvc = getMockMvc(controller);

        mockMvc.perform(get("/login").accept(TEXT_HTML)).andExpect(status().isOk())
                .andExpect(model().attribute("createAccountLink", "/create_account"));
    }

    @Test
    public void testCustomSignupLink() throws Exception {
        MockEnvironment environment = new MockEnvironment();
        environment.setProperty("links.signup", "http://www.example.com/signup");

        RemoteUaaController controller = new RemoteUaaController(environment, new RestTemplate());
        Prompt first = new Prompt("how", "text", "How did I get here?");
        Prompt second = new Prompt("where", "password", "Where does that highway go to?");
        controller.setPrompts(Arrays.asList(first, second));

        MockMvc mockMvc = getMockMvc(controller);

        mockMvc.perform(get("/login").accept(TEXT_HTML)).andExpect(status().isOk())
                .andExpect(model().attribute("createAccountLink", "http://www.example.com/signup"));
    }

    @Test
    public void testLocalSignupDisabled() throws Exception {
        MockEnvironment environment = new MockEnvironment();
        environment.setProperty("login.selfServiceLinksEnabled", "false");

        RemoteUaaController controller = new RemoteUaaController(environment, new RestTemplate());
        Prompt first = new Prompt("how", "text", "How did I get here?");
        Prompt second = new Prompt("where", "password", "Where does that highway go to?");
        controller.setPrompts(Arrays.asList(first, second));

        MockMvc mockMvc = getMockMvc(controller);

        mockMvc.perform(get("/login").accept(TEXT_HTML)).andExpect(status().isOk())
                .andExpect(model().attribute("createAccountLink", nullValue()));
    }

    @Test
    public void testCustomSignupLinkWithLocalSignupDisabled() throws Exception {
        MockEnvironment environment = new MockEnvironment();
        environment.setProperty("login.selfServiceLinksEnabled", "false");
        environment.setProperty("links.signup", "http://www.example.com/signup");
        environment.setProperty("links.passwd", "http://www.example.com/passwd");

        RemoteUaaController controller = new RemoteUaaController(environment, new RestTemplate());
        Prompt first = new Prompt("how", "text", "How did I get here?");
        Prompt second = new Prompt("where", "password", "Where does that highway go to?");
        controller.setPrompts(Arrays.asList(first, second));

        MockMvc mockMvc = getMockMvc(controller);

        mockMvc.perform(get("/login").accept(TEXT_HTML)).andExpect(status().isOk())
                .andExpect(model().attribute("createAccountLink", nullValue()))
                .andExpect(model().attribute("forgotPasswordLink", nullValue()));
    }

    private MockMvc getMockMvc(RemoteUaaController controller) {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/pivotal");
        viewResolver.setSuffix(".jsp");
        return MockMvcBuilders.standaloneSetup(controller).setViewResolvers(viewResolver).build();
    }
}