package de.passau.uni.sec.compose.id.rest.controller;
import static de.passau.uni.sec.compose.id.rest.controller.fixture.RestDataFixture.authenticateUserDataJSON;
import static de.passau.uni.sec.compose.id.rest.controller.fixture.RestEventFixtures.authenticateUserMessage;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.web.servlet.MockMvc;
import de.passau.uni.sec.compose.id.common.exception.IdManagementException;
import de.passau.uni.sec.compose.id.common.exception.IdManagementException.Level;
import de.passau.uni.sec.compose.id.core.service.UserAuthenticate;
import de.passau.uni.sec.compose.id.core.service.UserService;
import de.passau.uni.sec.compose.id.rest.controller.authentication.AuthenticateUserController;
import de.passau.uni.sec.compose.id.rest.messages.UserAuthenticatedMessage;
import de.passau.uni.sec.compose.id.rest.messages.UserCredentials;
public class AuthenticateUserControllerIntegrationTest {
MockMvc mockMvc;
@InjectMocks
AuthenticateUserController authenticateUserController;
@Mock
UserAuthenticate userAuthenticate;
@Before
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
this.mockMvc = standaloneSetup(authenticateUserController)
.setMessageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
@Test
public void authenticateIdmExceptionTest() throws Exception {
when(userAuthenticate.authenticateUser(any(UserCredentials.class)))
.thenThrow(
new IdManagementException(null, null, LoggerFactory
.getLogger(UserService.class), null,
Level.ERROR, 500));
this.mockMvc.perform(
post("/auth/user/").content(authenticateUserDataJSON())
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)).andExpect(
status().is5xxServerError());
}
@Test
public void authenticateUserHttpOkTest() throws Exception {
when(userAuthenticate.authenticateUser(any(UserCredentials.class)))
.thenReturn(new UserAuthenticatedMessage());
this.mockMvc.perform(
post("/auth/user/").content(authenticateUserDataJSON())
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)).andExpect(
status().isOk());
}
@Test
public void authenticateUserRendersAsJsonTest() throws Exception {
when(userAuthenticate.authenticateUser(any(UserCredentials.class)))
.thenReturn(authenticateUserMessage("testToken", "testType"));
this.mockMvc
.perform(
post("/auth/user/").content(authenticateUserDataJSON())
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.accessToken").value("testToken"))
.andExpect(jsonPath("$.token_type").value("testType"));
}
}