Exemplo de uso de Rest Assured para teste de API

From Basef
Jump to: navigation, search
package br.com.caelum.leilao.teste;
 
import br.com.caelum.leilao.modelo.Leilao;
import br.com.caelum.leilao.modelo.Usuario;
import com.jayway.restassured.path.json.JsonPath;
import com.jayway.restassured.path.xml.XmlPath;
import org.junit.Test;
 
import java.util.List;
 
import static com.jayway.restassured.RestAssured.expect;
import static com.jayway.restassured.RestAssured.given;
import static org.junit.Assert.assertEquals;
 
public class MyTest {
 
    @Test
    public void deveRetornarListaDeUsuarios() {
        XmlPath path = given()
                .header("Accept", "application/xml")
                .get("/usuarios")
                .andReturn().xmlPath();
 
        List<Usuario> usuarios = path.getList("list.usuario", Usuario.class);
 
        // Usuario usuario1 = path.getObject("list.usuario[0]", Usuario.class);
        // Usuario usuario2 = path.getObject("list.usuario[1]", Usuario.class);
 
        Usuario esperado1 = new Usuario(1L, "Mauricio Aniche", "mauricio.aniche@caelum.com.br");
        Usuario esperado2 = new Usuario(2L, "Guilherme Silveira", "guilherme.silveira@caelum.com.br");
 
        // assertEquals(esperado1, usuario1);
        // assertEquals(esperado2, usuario2);
 
        assertEquals(esperado1, usuarios.get(0));
        assertEquals(esperado2, usuarios.get(1));
    }
 
    @Test
    public void deveRetornarUsuarioPeloId() {
        JsonPath path = given()
                .queryParam("usuario.id", 1)
                .header("Accept", "application/json")
                .get("/usuarios/show")
                .andReturn().jsonPath();
 
        Usuario usuario = path.getObject("usuario", Usuario.class);
        Usuario esperado = new Usuario(1L, "Mauricio Aniche", "mauricio.aniche@caelum.com.br");
 
        assertEquals(esperado, usuario);
    }
 
    @Test
    public void deveRetornarLeilaoPorId() {
        JsonPath path = given()
                .queryParam("leilao.id", 1)
                .header("Accept", "application/json")
                .get("/leiloes/show")
                .andReturn().jsonPath();
 
        Leilao leilao = path.getObject("leilao", Leilao.class);
 
        assertEquals("Geladeira", leilao.getNome());
    }
 
    @Test
    public void deveRetornarTotalDeLeiloes() {
        JsonPath path = given()
                .header("Accept", "application/json")
                .get("/leiloes/total")
                .andReturn().jsonPath();
 
        int total = path.getInt("int");
 
        assertEquals(total, 2);
    }
 
    @Test
    public void deveAdicionarUmUsuario() {
        Usuario joao = new Usuario("Joao da Silva", "joao@dasilva.com");
        XmlPath retorno = given()
            .header("Accept", "application/xml")
            .contentType("application/xml")
            .body(joao)
            .expect().statusCode(200)
            .when().post("/usuarios")
            .andReturn().xmlPath();
 
        Usuario resposta = retorno.getObject("usuario", Usuario.class);
        assertEquals("Joao da Silva", resposta.getNome());
        assertEquals("joao@dasilva.com", resposta.getEmail());
 
        given()
            .contentType("application/xml").body(resposta)
            .expect().statusCode(200)
            .when().delete("/usuarios/deleta").andReturn().asString();
    }
 
    @Test
    public void deveInserirLeiloes() {
        Usuario mauricio = new Usuario(1l, "Mauricio Aniche", "mauricio.aniche@caelum.com.br");
        Leilao leiloes = new Leilao(1l, "Geladeira", 800.0, mauricio, false);
 
        XmlPath retorno =
            given()
                .header("Accept", "application/xml")
                .contentType("application/xml")
                .body(leiloes)
                .expect()
                .statusCode(200)
                .when()
                .post("/leiloes")
                .andReturn()
                .xmlPath();
 
        Leilao resposta = retorno.getObject("leilao", Leilao.class);
 
        assertEquals("Geladeira", resposta.getNome());
 
        // deletando aqui
        given()
            .contentType("application/xml")
            .body(resposta)
            .expect()
            .statusCode(200)
            .when()
            .delete("/leiloes/deleta")
            .andReturn().asString();
    }
 
    @Test
    public void deveGerarUmCookie() {
        expect()
            .cookie("rest-assured", "funciona")
            .when()
            .get("/cookie/teste");
    }
 
    @Test
    public void deveGerarUmHeader() {
        expect()
            .header("novo-header", "abc")
            .when()
            .get("/cookie/teste");
    }
}