nl.surfnet.coin.teams.control.DetailTeamControllerTest.java Source code

Java tutorial

Introduction

Here is the source code for nl.surfnet.coin.teams.control.DetailTeamControllerTest.java

Source

/*
 * Copyright 2012 SURFnet bv, The Netherlands
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package nl.surfnet.coin.teams.control;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;

import org.junit.Test;
import org.mockito.internal.stubbing.answers.Returns;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.web.bind.support.SimpleSessionStatus;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.view.RedirectView;

import nl.surfnet.coin.api.client.OpenConextOAuthClient;
import nl.surfnet.coin.api.client.domain.Person;
import nl.surfnet.coin.teams.domain.Invitation;
import nl.surfnet.coin.teams.domain.JoinTeamRequest;
import nl.surfnet.coin.teams.domain.Member;
import nl.surfnet.coin.teams.domain.Role;
import nl.surfnet.coin.teams.domain.Team;
import nl.surfnet.coin.teams.domain.TeamExternalGroup;
import nl.surfnet.coin.teams.interceptor.LoginInterceptor;
import nl.surfnet.coin.teams.service.GrouperTeamService;
import nl.surfnet.coin.teams.service.JoinTeamRequestService;
import nl.surfnet.coin.teams.service.TeamExternalGroupDao;
import nl.surfnet.coin.teams.service.TeamInviteService;
import nl.surfnet.coin.teams.util.ControllerUtil;
import nl.surfnet.coin.teams.util.TokenUtil;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

/**
 * Tests for {@link DetailTeamController}
 *
 */
public class DetailTeamControllerTest extends AbstractControllerTest {

    private DetailTeamController detailTeamController = new DetailTeamController();

    @Test
    public void testStartNotMember() throws Exception {
        MockHttpServletRequest request = getRequest();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Member);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "Jane Doe", "member-2", "jane@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        String result = detailTeamController.start(getModelMap(), request, "team-1");

        Team team = (Team) getModelMap().get("team");

        Member member = team.getMembers().get(0);

        assertEquals("team-1", team.getId());
        assertEquals("Team 1", team.getName());
        assertEquals("team description", team.getDescription());

        assertEquals(1, team.getMembers().size());
        assertEquals("Jane Doe", member.getName());
        assertEquals("jane@doe.com", member.getEmail());
        assertEquals("member-2", member.getId());
        assertTrue(member.getRoles().contains(Role.Member));
        assertFalse(member.getRoles().contains(Role.Admin));
        assertFalse(member.getRoles().contains(Role.Manager));
        assertEquals("detailteam", result);
    }

    @Test
    public void testStartMember() throws Exception {
        MockHttpServletRequest request = getRequest();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Member);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "Jane Doe", "member-2", "jane@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "John Doe", "member-1", "john@doe.com"));
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);

        JoinTeamRequestService joinTeamRequestService = mock(JoinTeamRequestService.class);
        when(joinTeamRequestService.findPendingRequests(mockTeam))
                .thenReturn(Collections.<JoinTeamRequest>emptyList());

        TeamExternalGroupDao teamExternalGroupDao = mock(TeamExternalGroupDao.class);
        when(teamExternalGroupDao.getByTeamIdentifier("team-1")).thenReturn(new ArrayList<TeamExternalGroup>());

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireMock(detailTeamController, joinTeamRequestService, JoinTeamRequestService.class);
        autoWireMock(detailTeamController, teamExternalGroupDao, TeamExternalGroupDao.class);
        autoWireRemainingResources(detailTeamController);

        String result = detailTeamController.start(getModelMap(), request, "team-1");

        Team team = (Team) getModelMap().get("team");

        assertEquals("team-1", team.getId());
        assertEquals("Team 1", team.getName());
        assertEquals("team description", team.getDescription());
        assertEquals("detailteam", result);
    }

    @Test
    public void testStartManager() throws Exception {
        MockHttpServletRequest request = getRequest();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Manager);
        roles.add(Role.Member);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "Jane Doe", "member-2", "jane@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "John Doe", "member-1", "john@doe.com"));
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);

        JoinTeamRequestService joinTeamRequestService = mock(JoinTeamRequestService.class);
        when(joinTeamRequestService.findPendingRequests(mockTeam))
                .thenReturn(Collections.<JoinTeamRequest>emptyList());

        TeamExternalGroupDao teamExternalGroupDao = mock(TeamExternalGroupDao.class);
        when(teamExternalGroupDao.getByTeamIdentifier("team-1")).thenReturn(new ArrayList<TeamExternalGroup>());

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireMock(detailTeamController, joinTeamRequestService, JoinTeamRequestService.class);
        autoWireMock(detailTeamController, teamExternalGroupDao, TeamExternalGroupDao.class);

        autoWireRemainingResources(detailTeamController);

        String result = detailTeamController.start(getModelMap(), request, "team-1");

        Team team = (Team) getModelMap().get("team");

        assertEquals("team-1", team.getId());
        assertEquals("Team 1", team.getName());
        assertEquals("team description", team.getDescription());
        assertEquals("detailteam", result);
    }

    @Test
    public void testStartAdmin() throws Exception {
        MockHttpServletRequest request = getRequest();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Manager);
        roles.add(Role.Member);
        roles.add(Role.Admin);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "Jane Doe", "member-2", "jane@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "John Doe", "member-1", "john@doe.com"));
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);

        JoinTeamRequestService joinTeamRequestService = mock(JoinTeamRequestService.class);
        when(joinTeamRequestService.findPendingRequests(mockTeam))
                .thenReturn(Collections.<JoinTeamRequest>emptyList());

        TeamExternalGroupDao teamExternalGroupDao = mock(TeamExternalGroupDao.class);
        when(teamExternalGroupDao.getByTeamIdentifier("team-1")).thenReturn(new ArrayList<TeamExternalGroup>());

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireMock(detailTeamController, joinTeamRequestService, JoinTeamRequestService.class);
        autoWireMock(detailTeamController, teamExternalGroupDao, TeamExternalGroupDao.class);

        autoWireRemainingResources(detailTeamController);

        String result = detailTeamController.start(getModelMap(), request, "team-1");

        Team team = (Team) getModelMap().get("team");
        boolean onlyAdmin = (Boolean) getModelMap().get("onlyAdmin");

        assertEquals("team-1", team.getId());
        assertEquals("Team 1", team.getName());
        assertEquals("team description", team.getDescription());
        assertTrue(onlyAdmin);
        assertEquals("detailteam", result);
    }

    @Test
    public void testLeaveTeamHappyFlow() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Manager);
        roles.add(Role.Member);
        roles.add(Role.Admin);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "Jane Doe", "member-2", "jane@doe.com"));
        admins.add(new Member(new HashSet<Role>(), "John Doe", "member-1", "john@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "John Doe", "member-1", "john@doe.com"));
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView result = detailTeamController.leaveTeam(getModelMap(), request, token, token, "team-1",
                new SimpleSessionStatus());

        assertEquals("home.shtml?teams=my&view=app", result.getUrl());
    }

    @Test
    public void testLeaveTeam() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Manager);
        roles.add(Role.Member);
        roles.add(Role.Admin);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "John Doe", "member-1", "john@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "John Doe", "member-1", "john@doe.com"));
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView result = detailTeamController.leaveTeam(getModelMap(), request, token, token, "team-1",
                new SimpleSessionStatus());

        assertEquals("detailteam.shtml?team=team-1&view=app&mes=error.AdminCannotLeaveTeam", result.getUrl());
    }

    @Test
    public void testDeleteTeamHappyFlow() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Manager);
        roles.add(Role.Member);
        roles.add(Role.Admin);

        Member member = new Member(roles, "John Doe", "member-1", "john@doe.com");

        Team team = mock(Team.class);
        team.setName("team-1");

        TeamInviteService teamInviteService = mock(TeamInviteService.class);
        when(teamInviteService.findAllInvitationsForTeam(team)).thenReturn(Collections.<Invitation>emptyList());

        autoWireMock(detailTeamController, teamInviteService, TeamInviteService.class);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findMember("team-1", "member-1")).thenReturn(member);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(team);

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);

        TeamExternalGroupDao teamExternalGroupDao = mock(TeamExternalGroupDao.class);
        when(teamExternalGroupDao.getByTeamIdentifier("team-1"))
                .thenReturn(Collections.<TeamExternalGroup>emptyList());
        autoWireMock(detailTeamController, teamExternalGroupDao, TeamExternalGroupDao.class);

        autoWireRemainingResources(detailTeamController);

        RedirectView result = detailTeamController.deleteTeam(getModelMap(), request, token, token, "team-1",
                new SimpleSessionStatus());

        assertEquals("home.shtml?teams=my&view=app", result.getUrl());
    }

    @Test
    public void testDeleteTeam() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Member);

        Member member = new Member(roles, "John Doe", "member-1", "john@doe.com");

        autoWireMock(detailTeamController, new Returns(member), GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView result = detailTeamController.deleteTeam(getModelMap(), request, token, token, "team-1",
                new SimpleSessionStatus());

        assertEquals("detailteam.shtml?team=team-1&view=app", result.getUrl());
    }

    @Test
    public void testDeleteMemberHappyFlow() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        // add the member
        request.addParameter("member", "member-2");

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Manager);
        roles.add(Role.Member);
        roles.add(Role.Admin);

        Member owner = new Member(roles, "John Doe", "member-1", "john@doe.com");
        Member member = new Member(roles, "Jane Doe", "member-2", "jane@doe.com");

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findMember("team-1", "member-2")).thenReturn(member);
        when(grouperTeamService.findMember("team-1", "member-1")).thenReturn(owner);

        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView result = detailTeamController.deleteMember(getModelMap(), request, token, token, "team-1",
                new SimpleSessionStatus());

        assertEquals("detailteam.shtml?team=team-1&view=app", result.getUrl());
    }

    @Test
    public void testDeleteMember() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        // add the member
        request.addParameter("member", "member-1");

        Member member = getMember();

        autoWireMock(detailTeamController, new Returns(member), GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView result = detailTeamController.deleteMember(getModelMap(), request, token, token, "team-1",
                new SimpleSessionStatus());

        assertEquals("detailteam.shtml?team=team-1&mes=error.NotAuthorizedToDeleteMember&view=app",
                result.getUrl());
    }

    @Test
    public void testAddRoleHappyFlow() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        request.addParameter("teamId", "team-1");
        request.addParameter("memberId", "member-1");
        request.addParameter("roleId", Role.Manager.toString());
        request.addParameter("doAction", "add");

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        Member member = getMember();
        when(grouperTeamService.findMember("team-1", "member-1")).thenReturn(member);
        when(grouperTeamService.addMemberRole("team-1", "member-1", Role.Manager, "member-1")).thenReturn(true);
        autoWireMock(detailTeamController, new Returns(true), ControllerUtil.class);
        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView view = detailTeamController.addOrRemoveRole(getModelMap(), request, token, token,
                new SimpleSessionStatus());
        assertEquals("detailteam.shtml?team=team-1&view=app&mes=role.added&offset=0", view.getUrl());
    }

    @Test
    public void testAddRoleNotAuthorized() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        // Add the team, member & role
        request.addParameter("teamId", "team-1");
        request.addParameter("memberId", "member-1");
        request.addParameter("roleId", Role.Manager.toString());
        request.addParameter("doAction", "add");

        autoWireMock(detailTeamController, new Returns(false), GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        Member member = getMember();
        when(grouperTeamService.findMember("team-1", "member-1")).thenReturn(member);
        when(grouperTeamService.addMemberRole("team-1", "member-1", Role.Manager, "member-1")).thenReturn(false);
        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireMock(detailTeamController, new Returns(false), ControllerUtil.class);

        RedirectView view = detailTeamController.addOrRemoveRole(getModelMap(), request, token, token,
                new SimpleSessionStatus());
        assertEquals("detailteam.shtml?team=team-1&view=app&mes=no.role.added&offset=0", view.getUrl());
    }

    @Test
    public void testRemoveRoleHappyFlow() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        request.addParameter("teamId", "team-1");
        request.addParameter("memberId", "member-1");
        request.addParameter("roleId", "1");
        request.addParameter("doAction", "remove");

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Member);
        roles.add(Role.Manager);
        roles.add(Role.Admin);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "Jane Doe", "member-2", "jane@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);
        when(grouperTeamService.removeMemberRole("team-1", "member-1", Role.Manager, "member-1")).thenReturn(true);

        autoWireMock(detailTeamController, new Returns(true), ControllerUtil.class);
        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView view = detailTeamController.addOrRemoveRole(getModelMap(), request, token, token,
                new SimpleSessionStatus());

        assertEquals("detailteam.shtml?team=team-1&view=app&mes=role.removed&offset=0", view.getUrl());
    }

    @Test
    public void testRemoveRoleOneAdmin() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        // Add the team, member & role
        request.addParameter("teamId", "team-1");
        request.addParameter("memberId", "member-1");
        request.addParameter("roleId", "0");
        request.addParameter("doAction", "remove");

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Member);
        roles.add(Role.Manager);
        roles.add(Role.Admin);

        HashSet<Member> admins = new HashSet<Member>();
        admins.add(new Member(new HashSet<Role>(), "Jane Doe", "member-2", "jane@doe.com"));

        List<Member> members = new ArrayList<Member>();
        members.add(new Member(roles, "Jane Doe", "member-2", "jane@doe.com"));

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);

        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findAdmins(mockTeam)).thenReturn(admins);
        when(grouperTeamService.removeMemberRole("team-1", "member-1", Role.Admin, "member-1")).thenReturn(false);

        autoWireMock(detailTeamController, new Returns(true), ControllerUtil.class);
        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView view = detailTeamController.addOrRemoveRole(getModelMap(), request, token, token,
                new SimpleSessionStatus());

        assertEquals("detailteam.shtml?team=team-1&view=app&mes=no.role.added.admin.status&offset=0",
                view.getUrl());

    }

    @Test
    public void testRemoveRoleException() throws Exception {
        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        // do NOT add the team, member & role

        autoWireRemainingResources(detailTeamController);

        RedirectView view = detailTeamController.addOrRemoveRole(getModelMap(), request, token, token,
                new SimpleSessionStatus());

        assertEquals("home.shtml?teams=my&view=app", view.getUrl());
    }

    @Test(expected = RuntimeException.class)
    public void testApproveRequestNoPendingRequest() throws Exception {
        RequestContextHolder.setRequestAttributes(getRequestAttributes(), true);

        MockHttpServletRequest request = getRequest();
        String token = TokenUtil.generateSessionToken();
        // Add the member & role
        request.addParameter("member", "potential-member-1");
        request.addParameter("role", "0");

        HashSet<Role> roles = new HashSet<Role>();
        roles.add(Role.Member);
        roles.add(Role.Manager);
        roles.add(Role.Admin);

        List<Member> members = new ArrayList<Member>();
        Member loggedInMember = new Member(roles, "Jane Doe", "member-1", "jane@doe.com");
        members.add(loggedInMember);

        Person loggedInPerson = mock(Person.class);
        when(loggedInPerson.getId()).thenReturn("member-1");

        Person memberToAdd = mock(Person.class);
        when(memberToAdd.getId()).thenReturn("potential-member-1");

        Team mockTeam = new Team("team-1", "Team 1", "team description", members);
        GrouperTeamService grouperTeamService = mock(GrouperTeamService.class);
        when(grouperTeamService.findTeamById("team-1")).thenReturn(mockTeam);
        when(grouperTeamService.findMember("team-1", "member-1")).thenReturn(loggedInMember);

        JoinTeamRequestService joinTeamRequestService = mock(JoinTeamRequestService.class);
        when(joinTeamRequestService.findPendingRequest(memberToAdd, mockTeam)).thenReturn(null);

        OpenConextOAuthClient apiClient = mock(OpenConextOAuthClient.class);
        when(apiClient.getPerson("member-2", null)).thenReturn(loggedInPerson);
        when(apiClient.getPerson("potential-member-1", null)).thenReturn(memberToAdd);

        autoWireMock(detailTeamController, new Returns(true), ControllerUtil.class);
        autoWireMock(detailTeamController, grouperTeamService, GrouperTeamService.class);
        autoWireMock(detailTeamController, apiClient, OpenConextOAuthClient.class);
        autoWireMock(detailTeamController, joinTeamRequestService, JoinTeamRequestService.class);
        autoWireRemainingResources(detailTeamController);

        RedirectView result = detailTeamController.deleteRequest(request, getModelMap(), token, token, "team-1",
                new SimpleSessionStatus());
        assertEquals("detailteam.shtml?team=team-1&view=app", result.getUrl());
    }

    @Override
    public void setup() throws Exception {
        super.setup();
    }

    private RequestAttributes getRequestAttributes() {
        MockHttpServletRequest request = new MockHttpServletRequest();
        MockHttpSession session = new MockHttpSession();
        Person person = new Person();
        person.setId("test");
        session.setAttribute(LoginInterceptor.PERSON_SESSION_KEY, person);
        request.setSession(session);
        return new ServletRequestAttributes(request);
    }
}