All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ec.gob.senescyt.sniese.commons.tests.RecursoSeguroIntTest Maven / Gradle / Ivy

Go to download

Librería que contiene clases de uso comun para microservicios hechos en dropwizard

There is a newer version: 1.0.16
Show newest version
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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy