Problema 3: Inserir produto
Implemente os testes de API usando RestAssured para inserção de produto (método POST do ProductController), considerando os seguintes cenários. Lembre-se de inserir o token no cabeçalho da requisição.
Se olharmos uma requisição Postman, nós passamos no body os dados a serem inseridos, correto?

Se repararmos bem, o lado esquerdo (parâmetro) é sempre uma String. Já o valor inserido é variável, pode ser String, Double (float). Já nas categorias, temos uma lista de objetos.
Logo, é exatamente o que já estudamos antes do Map que recebe dois tipos de dados, veja:

setUp

Nós vamos dando um put até chegar em categories. Veja na imagem do Postman acima, que é inserido uma lista de categorias. Essa lista do postman é a mesma coisa do primeiro Map criado, possui uma Key ("id, String") e um valor de qualquer tipo.
Portanto, criaremos uma Lista, que conterá um Map de <String, Object>
, igual a de cima.
Instanciaremos dois maps "category1 e category2", se tivesse a terceira, continuaríamos. Iremos inserir manualmente o "id" e o valor que está no PUT.
Após isso, alocamos esses Map's dentro da lista e por fim, daremos o PUT no Map inicial criado.
Ok, e para transformar esse Map criado em um objeto JSON?
Dentro dos métodos, faremos o seguinte:

Essa requisição é diferente, pois precisamos passar o token (admin ou client), ela é a PRIMEIRA coisa a ser passada no given, veja ➡️
@Test
public void insertShouldReturnProductCreatedWhenAdminLogged() {
JSONObject newProduct = new JSONObject(postProductInstance);
String productAsString = newProduct.toString();
given()
//isso serve para especificar o tipo da informação
.header("Content-type", "application/json")
.header("Authorization", "Bearer " + adminToken)
.body(productAsString)
.contentType(ContentType.JSON)
.accept(ContentType.JSON)
.when()
.post("/products")
.then()
.statusCode(201)
.body("name", equalTo("Meu produto"))
.body("price", is(50.0F))
.body("categories.id", hasItems(2, 3));
}
Atualizado