# Casos de Teste

Um **Caso de Teste** é uma configuração que inclui um conjunto definido de entradas, condições e resultados esperados usados para verificar se um pipeline de integração específico está funcionando conforme o esperado. Casos de teste são especialmente úteis para melhorar a qualidade das integrações e documentar o comportamento esperado dos seus fluxos.

Eles permitem:

* Simular diversas condições de entrada.
* Simular respostas de conectores.
* Comparar automaticamente os resultados reais com os esperados.

## **Criando um Caso de Teste**

1. No menu lateral no Canvas, acesse **Fluxo**.
2. Clique em **Criar novo caso de teste**.

<figure><img src="/files/1thP5OSM78Ac5O0BbqXT" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### Defina as condições

Ao criar um caso de teste, é necessário configurar os elementos que definem o cenário:

#### **Payload**

O payload representa os dados de entrada do teste. Ao adicioná-lo, forneça:

* **JSON:** Dados de entrada em formato JSON. Você também pode [reutilizar payloads salvos anteriormente no Painel de Execução](/documentation/developer-guide/pt-br/development-cycle/build-overview/canvas/execution-panel.md#coluna-payload) do pipeline clicando em **Carregar para editar**.
* **Nome:** Um nome para o payload.
* **Descrição:** Uma breve descrição explicando o contexto ou o propósito do payload.

#### **Respostas Mock**

Respostas mock permitem emular as saídas de conectores, útil para validar fluxos em diferentes condições. Ao criar uma resposta, forneça:

* **Conector:** O conector cuja resposta você deseja simular.
* **JSON:** A resposta simulada em formato JSON.
* **Nome:** Um nome para a resposta simulada.
* **Descrição:** Uma breve explicação do cenário representado pela simulação.

Para simular mais conectores, clique em **Adicionar mais mocks**.

#### **Resultados Esperados**

O resultado esperado define a saída que o fluxo deve produzir após a execução. Ele é usado para validar a execução ao comparar o resultado real com o resultado esperado, por meio de condições e operadores configuráveis.

<figure><img src="/files/0PnLTxxYaLqwgj6GrYiD" alt=""><figcaption></figcaption></figure>

Comece informando os seguintes dados:

* **Nome:** Um identificador único para a asserção.
* **Descrição:** Uma breve explicação do que está sendo validado.

Em seguida, adicione uma ou mais condições. Para adicionar uma condição, clique em **Adicionar condição** e configure os seguintes campos:

* **JSONPath:** A expressão JSONPath que aponta para o campo do resultado a ser avaliado.
* **Operador:** O operador de comparação usado para validar o resultado. As opções disponíveis são:
  * **Igual a, Diferente de:** Verifica se o valor retornado é igual ou diferente do valor esperado.
  * **Maior que, Maior ou igual a:** Verifica se o valor retornado é maior ou maior ou igual ao valor esperado.
  * **Menor que, Menor ou igual a:** Verifica se o valor retornado é menor ou menor ou igual ao valor esperado.
  * **É Verdadeiro, É Falso:** Valida se o valor retornado é um booleano definido como `true` ou `false`.
  * **É Nulo, Não É Nulo:** Valida se o valor retornado é `null` ou está definido.
  * **Está em, Não está em:** Valida se o valor retornado pertence ou não a um conjunto definido de valores.
  * **Está Vazio, Não Está Vazio:** Verifica se o valor retornado está vazio ou contém ao menos um valor, elemento ou propriedade.
  * **Contém, Não Contém:** Verifica se o valor retornado contém ou não o conteúdo esperado.
* **Valor:** O valor esperado a ser comparado. Pode ser um Valor Simples ou um Objeto JSON. Use o seletor do campo para alternar entre os formatos.

{% hint style="info" %}
Alguns operadores realizam verificações de estado e não exigem um valor para comparação, como **É Verdadeiro**, **É Falso**, **É Nulo**, **Não É Nulo**, **Está Vazio** e **Não Está Vazio**.
{% endhint %}

É possível combinar várias condições usando os seguintes operadores lógicos:

* `AND`
* `OR`
  {% endstep %}

{% step %}

### Documente o teste

Antes de salvar, forneça:

* **Nome:** Nome único para identificar o caso de teste.
* **Descrição:** Breve explicação do caso, incluindo o propósito ou cenário testado.
* **Grupo:** Um grupo para organizar o caso de teste. Clique em **Crie seu primeiro grupo** para começar a agrupar seus casos de teste ou selecione um grupo existente para atribuir o caso
  {% endstep %}

{% step %}

### Salve o teste

Após preencher todas as informações obrigatórias, clique em Salvar.

{% hint style="info" %}
O caso de teste deve conter pelo menos nome e resultado esperado para ser salvo.
{% endhint %}

O caso de teste aparecerá no menu lateral, em **Fluxo**. Clique no ícone de três pontos para:

* **Editar:** Editar configurações do teste.
* **Remover:** Excluir o teste.
* **Duplicar:** Criar uma cópia do teste.
* **Execução única:** Executar o teste.
* **Abrir execução:** Disponível após a execução do teste.
  {% endstep %}
  {% endstepper %}

## **Executando o Caso de Teste**

Para executar o caso de teste:

1. Verifique se o fluxo está conectado a um trigger. Sem isso, o teste não será executado.
2. No menu lateral, localize o teste e clique nos três pontos.
3. Selecione **Execução única**.
4. A plataforma executará o teste e comparará a saída com o esperado:

* **Se passar:** Um ícone de sucesso verde será exibido.
* **Se falhar:** Um ícone de falha vermelho será exibido.

5\. Para ver os detalhes no **Painel de Execução**, clique em **Abrir execução**. Mais informações podem ser encontradas na aba **Resultados**. Você também pode expandir a seção **Mensagens** no painel lateral esquerdo para analisar a saída de cada conector individualmente.

<figure><img src="/files/GTrDDEuPHpxorSEZx0NN" alt=""><figcaption></figcaption></figure>

## **Exemplo: Adicionar data de nascimento padrão**

* **Caso de uso:** Você quer garantir que uma data de nascimento padrão seja adicionada quando ela estiver ausente no JSON de entrada.
* **Objetivo:** Usar o **Transformer (JOLT) V2** para adicionar o campo `"dataNascimento": "01/01/1970"` quando ele não estiver presente na entrada.

### **Visão geral do pipeline**

Este pipeline usa um único conector:

* [**Transformer (JOLT) V2**](/documentation/connectors-and-triggers/pt-br/connectors/tools/jolt-v2.md)**:** Adiciona uma data de nascimento padrão se ela estiver ausente no payload de entrada.

Vamos testar essa transformação usando um caso de teste com uma entrada que não inclui o campo `dataNascimento`.

### **Etapa 1: Configurar o Transformer JOLT (V2)**

Usaremos a operação `default` para adicionar um campo quando ele ainda não existir.

**Especificação JOLT:**

```json
[    
 {
   "operation": "default",
   "spec": {
     "cliente": {
       "dataNascimento": "01/01/1970"
     }
   }
 }
]
```

Essa especificação verifica se o campo `dataNascimento` existe dentro de `cliente`. Caso não exista, ele é adicionado com o valor padrão `”01/01/1970”`.

### **Etapa 2: Criar o Caso de Teste**

Vamos simular um payload que contém apenas o nome e o CPF, e verificar se o conector Transformer (JOLT) adiciona a data de nascimento padrão.

* **Payload:**

```json
{
 "cliente": {
   "nome": "Cliente Padrão",
   "cpf": "123.456.789-01"
 }
}
```

* **Resposta Mock:** *(Deixe em branco neste exemplo)*
* **Resultado Esperado:**
  * **JSONPath:** `$.cliente`
  * **Valor:**

```json
{
   "nome": "Cliente Padrão",
   "cpf": "123.456.789-01",
   "dataNascimento": "01/01/1970"
}
```

### **Validação do resultado**

Após a execução do caso de teste, a saída é a seguinte:

```json
{
  "cliente": {
   	"nome": "Cliente Padrão",
   	"cpf": "123.456.789-01",
   	"dataNascimento": "01/01/1970"
  }
}
```

Isso confirma que o teste foi bem-sucedido:

* O **Transformer (JOLT) V2** aplicou a operação `default` conforme o esperado.
* Como o campo `dataNascimento` não estava presente na entrada original, ele foi adicionado com o valor padrão `”01/01/1970”`.

## **Exemplo: Organizar catálogo de produtos**

* **Caso de uso:** Você quer reestruturar os dados de produto retornados de um banco de dados em um novo formato.
* **Objetivo:** Agrupar os detalhes do produto dentro de um objeto `detalhes` e renomear campos para melhor organização.

### **Visão geral do pipeline**

Este pipeline usa os seguintes conectores:

1. [**DB V2**](/documentation/connectors-and-triggers/pt-br/connectors/structured-data/db-v2.md): Recupera os dados do produto.
2. [**Transformer (JOLT) V2**](/documentation/connectors-and-triggers/pt-br/connectors/tools/jolt-v2.md): Reorganiza e renomeia os campos usando a operação `shift`.

Como não temos acesso ao banco de dados real, vamos simular essa resposta com um caso de teste usando uma resposta simulada do conector DB V2.

### **Etapa 1: Configurar o Transformer JOLT (V2)**

Vamos usar a operação `shift` do JOLT para mapear e reorganizar os campos.

**Especificação JOLT:**

```json
[
  {
    "operation": "shift",
    "spec": {
      "produto": {
        "id": "idProduto",
        "nome": "detalhes.nome",
        "marca": "detalhes.marca",
        "preço": "detalhes.preço.valor",
        "moeda": "detalhes.preço.moeda",
        "estoque": "detalhes.disponibilidade"
      }
    }
  }
]
```

Essa especificação renomeia `id` para `idProduto` e organiza os demais campos dentro do objeto `detalhes`.

### **Etapa 2: Criar o caso de teste**

Vamos simular a resposta do banco de dados e validar a transformação.

* **Payload:** *(Deixe em branco neste exemplo)*
* **Resposta Mock:**
  * **Conector:** DB V2
  * **Payload JSON:**

```json
{
  "produto": {
    "id": "12345",
    "nome": "Smartphone X1",
    "marca": "TechBrand",
    "preço": 699.99,
    "moeda": "BRL",
    "estoque": 25
  }
}
```

* **Resultado Esperado:**
  * **JSONPath:** `$.detalhes`
  * **Valor:**

```json
{
    "nome": "Smartphone X1",
    "marca": "TechBrand",
    "preço": {
      "valor": 699.99,
      "moeda": "BRL"
    },
    "disponibilidade": 25
  }
```

### **Validação do resultado**

Após a execução do caso de teste, a saída é a seguinte:

```json
{
  "idProduto": "12345",
  "detalhes": {
    "nome": "Smartphone X1",
    "marca": "TechBrand",
    "preço": {
      "valor": 699.99,
      "moeda": "BRL"
    },
    "disponibilidade": 25
  }
}
```

Isso confirma que o teste foi bem-sucedido:

* O **Transformer (JOLT) V2** aplicou a especificação corretamente para reestruturar os dados de entrada.
* Os campos foram renomeados e organizados dentro do objeto `detalhes`, conforme o planejado.
* O campo `idProduto` permaneceu no nível superior, enquanto os demais atributos foram agrupados logicamente dentro de `detalhes`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/developer-guide/pt-br/development-cycle/build-overview/canvas/test-cases.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
