ec.gob.senescyt.sniese.commons.tests.RecursoSeguroIntTest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sniese-commons-test Show documentation
Show all versions of sniese-commons-test Show documentation
Librería que contiene clases de uso comun para microservicios hechos en dropwizard
package ec.gob.senescyt.sniese.commons.tests;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import ec.gob.senescyt.sniese.commons.Constantes;
import ec.gob.senescyt.sniese.commons.security.Usuario;
import ec.gob.senescyt.sniese.commons.security.shiro.SeguridadRealm;
import ec.gob.senescyt.sniese.commons.tests.helpers.InicializadorPropiedades;
import io.dropwizard.setup.Environment;
import org.apache.shiro.web.env.IniWebEnvironment;
import org.apache.shiro.web.util.WebUtils;
import org.eclipse.jetty.http.HttpStatus;
import org.junit.Before;
import org.mockito.Mock;
import java.io.IOException;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
public class RecursoSeguroIntTest extends AbstractIntegrationTest {
private static String urlBaseAutenticacion = "https://localhost:8447/";
private static String urlBasePermisos = "https://localhost:8443/";
@Mock
private SeguridadRealm seguridadRealm;
@Mock
private Client clienteHttp;
public RecursoSeguroIntTest(Class applicationClass) {
super(applicationClass);
}
@Override
@Before
public void setUp() throws Exception {
super.setUp();
initMocks(this);
Environment environment = getRule().getEnvironment();
configurarSeguridad(environment);
}
private void configurarSeguridad(Environment environment) throws NoSuchFieldException, IllegalAccessException {
IniWebEnvironment env = (IniWebEnvironment) WebUtils.getRequiredWebEnvironment(environment.getApplicationContext().getServletContext());
seguridadRealm = env.getObject("SeguridadRealm", SeguridadRealm.class);
InicializadorPropiedades.asignar(seguridadRealm, "cliente", clienteHttp);
}
protected void configurarUsuarioConPermisos(Usuario usuario, String... permisos) throws IOException {
JsonNode permisosJson = crearJsonPermisos(permisos);
configurarClienteHttpParaUrlConRespuesta(urlBaseAutenticacion + Constantes.RECURSO_VERIFICACION_TOKEN, usuario.getNombreUsuario());
configurarClienteHttpParaUrlConRespuesta(urlBasePermisos + Constantes.RECURSO_PERMISOS_POR_TOKEN, permisosJson);
}
protected void configurarClienteHttpParaUrlConRespuesta(String url, Object respuesta) {
WebResource recursoWeb = mock(WebResource.class);
WebResource.Builder constructorWeb = mock(WebResource.Builder.class);
ClientResponse respuestaHttp = mock(ClientResponse.class);
when(clienteHttp.resource(url)).thenReturn(recursoWeb);
when(recursoWeb.type(anyString())).thenReturn(constructorWeb);
when(constructorWeb.header(anyString(), anyObject())).thenReturn(constructorWeb);
when(constructorWeb.get(ClientResponse.class)).thenReturn(respuestaHttp);
when(respuestaHttp.getStatus()).thenReturn(HttpStatus.OK_200);
when(respuestaHttp.getEntity(any(Class.class))).thenReturn(respuesta);
}
private JsonNode crearJsonPermisos(String[] permisos) throws IOException {
JsonNodeFactory fabricaNodosJson = new JsonNodeFactory(false);
ObjectNode listaPermisosJson = fabricaNodosJson.objectNode();
ArrayNode permisosJson = fabricaNodosJson.arrayNode();
for (String permiso : permisos) {
ObjectNode permisoJson = fabricaNodosJson.objectNode();
permisoJson.put("nombrePermiso", permiso);
permisosJson.add(permisoJson);
}
listaPermisosJson.put("elementos", permisosJson);
return listaPermisosJson;
}
}