package org.cloudfoundry.community.servicebroker.datalifecycle.controller;
import static org.hamcrest.Matchers.is;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
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.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import net.minidev.json.JSONObject;
import org.cloudfoundry.community.servicebroker.datalifecycle.controller.SanitizeController;
import org.cloudfoundry.community.servicebroker.datalifecycle.service.DataProviderService;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
public class SanitizeControllerTest {
private MockMvc mockMvc;
private String script = "drop * from table";
private String location = "/api/sanitizescript";
@InjectMocks
SanitizeController sanitizeController;
@Mock
DataProviderService service;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders
.standaloneSetup(sanitizeController)
.setMessageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
@Test
public void itShouldTellMeWhereToGetTheScriptIvePosted() throws Exception {
JSONObject input = new JSONObject();
input.put("script", script);
mockMvc.perform(
post(location)
.contentType(MediaType.APPLICATION_JSON)
.content(input.toJSONString())
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated())
.andExpect(header().string("Location", location));
verify(service, times(1)).saveScript(any());
}
@Test
public void itGetsTheScript() throws Exception {
when(service.getScript()).thenReturn(script);
mockMvc.perform(get(location).accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.script", is(script)));
}
@Test
public void itReturnsEmptyResponseWithNoScript() throws Exception {
when(service.getScript()).thenReturn(null);
mockMvc.perform(get(location).accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andExpect(content().string("{}"));
}
}