package test;
import java.util.Base64;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Form;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import junit.framework.TestCase;
import org.glassfish.jersey.client.ClientConfig;
import br.com.livro.domain.Carro;
import br.com.livro.domain.ResponseWithURL;
import br.com.livro.rest.GsonMessageBodyHandler;
public class RestTest extends TestCase {
public void testGetCarroId() {
// Cria o cliente da API
ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);
// Registra o parser com o Google-GSON
client.register(GsonMessageBodyHandler.class);
// URL do web service
String URL = "http://localhost:8080/Carros/rest/";
// Cria a requisição com o "caminho"
WebTarget target = client.target(URL).path("/carros/11");
// Faz a requisição do tipo GET solicitando um JSON como resposta.
Response response = target.request(MediaType.APPLICATION_JSON).get();
// Status HTTP de retorno
int status = response.getStatus();
// Lê um Carro (converte diretamente da string do JSON)
Carro c = response.readEntity(Carro.class);
assertEquals(200, status);
assertEquals("Ferrari FF", c.getNome());
}
public void testDeleteCarroId() {
// Cria o cliente da API
ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);
// Registra o parser com o Google-GSON
client.register(GsonMessageBodyHandler.class);
// URL do web service
String URL = "http://localhost:8080/Carros/rest/";
// Cria a requisição com o "caminho"
WebTarget target = client .target(URL).path("/carros/12");
// O teste de deletar s� funciona se o carro existir, ent�o vamos verificar antes.
Response responseGet =
target.request(MediaType.APPLICATION_JSON)
.get();
if(responseGet.getStatus() != 200) {
// N�o deixa prosseguir no teste se o carro n�o existe
System.err.println("Carro para deletr n�o existe, abortando teste.");
return;
}
// Faz a requisição do tipo GET solicitando um JSON como resposta.
Response response =
target.request(MediaType.APPLICATION_JSON)
.delete();
// Valida se a requisição foi OK
assertEquals(200, response.getStatus());
// Lê a response do pacote domain
br.com.livro.domain.Response s = response.readEntity(br.com.livro.domain.Response.class);
assertEquals("OK", s.getStatus());
assertEquals("Carro deletado com sucesso", s.getMsg());
}
public void testPostFormParams() {
ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);
client.register(GsonMessageBodyHandler.class);
// Cria os par�metros do formuLêrio
String base64 = Base64.getEncoder().encodeToString("Ricardo Lecheta".getBytes());
Form form = new Form();
form.param("fileName", "nome2.xt");
form.param("base64", base64);
String URL = "http://localhost:8080/Carros/";
// Faz a requisição do tipo POST com x-www-form-urlencoded
WebTarget target = client.target(URL).path("/rest/carros/postFotoBase64");
Entity<Form> entity = Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE);
Response response = target.request(MediaType.APPLICATION_JSON).post(entity);
// OK
assertEquals(200, response.getStatus());
// Converte para ResponseWithURL
ResponseWithURL r = response.readEntity(ResponseWithURL.class);
assertEquals("OK", r.getStatus());
assertEquals("Arquivo recebido com sucesso", r.getMsg());
}
public void testSalvarNovoCarro() {
ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);
client.register(GsonMessageBodyHandler.class);
// Cria o objeto normalmente.
Carro c = new Carro();
c.setNome("Novo Carro");
String URL = "http://localhost:8080/Carros/";
WebTarget target = client.target(URL).path("/rest/carros");
// Envia o objeto como JSON no corpo da requisição
Entity<Carro> entity = Entity.entity(c, MediaType.APPLICATION_JSON);
Response response = target.request(MediaType.APPLICATION_JSON).post(entity, Response.class);
// Valida se a requisição foi OK
assertEquals(200, response.getStatus());
// Lê a response do pacote domain
br.com.livro.domain.Response s = response.readEntity(br.com.livro.domain.Response.class);
assertEquals("OK", s.getStatus());
assertEquals("Carro salvo com sucesso", s.getMsg());
// Depois de salvar o carro, vou buscá-lo pelo nome para excluir.
target = client.target(URL).path("/rest/carros/nome/Novo Carro");
response = target.request(MediaType.APPLICATION_JSON).get();
assertEquals(200, response.getStatus());
c = response.readEntity(Carro.class);
assertEquals("Novo Carro", c.getNome());
Long id = c.getId();
// Deleta o carro que foi salvo no teste, para n�o deixar sujeira a base.
target = client .target(URL).path("/rest/carros/"+id);
response = target.request(MediaType.APPLICATION_JSON).delete();
assertEquals(200, response.getStatus());
}
}