package org.kalipo.web.rest;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.JSONException;
import org.json.JSONObject;
import org.mockito.Mockito;
import org.springframework.http.MediaType;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.web.servlet.MvcResult;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
/**
* Utility class for testing REST controllers.
*/
public class TestUtil {
/**
* MediaType for JSON UTF8
*/
public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(
MediaType.APPLICATION_JSON.getType(),
MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));
/**
* Convert an object to JSON byte array.
*
* @param object the object to convert
* @return the JSON byte array
* @throws IOException
*/
public static byte[] convertObjectToJsonBytes(Object object)
throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return mapper.writeValueAsBytes(object);
}
public static void mockSecurityContext(Object principal, Collection<String> privileges) {
AuthenticationStub authentication = new AuthenticationStub();
authentication.setPrincipal(principal);
authentication.setAuthenticated(true);
List<GrantedAuthority> authorities = new LinkedList<>();
privileges.forEach(privilege -> authorities.add(new SimpleGrantedAuthority(privilege)));
authentication.setAuthorities(authorities);
SecurityContext securityContext = Mockito.mock(SecurityContext.class);
Mockito.when(securityContext.getAuthentication()).thenReturn(authentication);
SecurityContextHolder.setContext(securityContext);
}
public static JSONObject toJson(MvcResult result) throws UnsupportedEncodingException, JSONException {
return new JSONObject(result.getResponse().getContentAsString());
}
}