# @reportfy/tester
[![npm version](https://img.shields.io/npm/v/@reportfy/apm.svg?style=flat-square)](https://www.npmjs.org/package/@reportfy/tester)
[![install size](https://packagephobia.now.sh/badge?p=@reportfy/tester)](https://packagephobia.now.sh/result?p=@reportfy/tester)
[![npm downloads](https://img.shields.io/npm/dm/@reportfy/tester.svg?style=flat-square)](http://npm-stat.com/charts.html?package=@reportfy/tester)


![reportfy](https://raw.githubusercontent.com/reportfy/tester/main/images/reportfy.svg)


Tester de integração para clientes que utilizam node.js.

> Sobre reportfy: [clique aqui](https://reportfy.com.br/)

## Sobre a tester.
- [Instalação](#instalação)
- [Configuração](#configuração)
    - [Framework nodejs](#Clientes)
        - [Koa](#Koa)
        - [Express](#Express)
        - [HapiJS](#HapiJS)
        - [Restify](#Restify)
    


## instalação

Usando npm:

```bash
$ npm install @reportfy/tester
```

Usando yarn:

```bash
$ yarn add @reportfy/tester
```


## Configuração

Para configuração é necessário acessar o [sistema da reporfy](https://app.reportfy.com.br) e
criar seus casos de teste, com isso terá o token para integração do sdk.

Após a instalação do sdk no ```package.json``` será criado um script de inicialização no projeto.


```json
{
  "name": "test",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "tester": "npx reportfy -k sua_chave_aqui' -ac 'access_key', -se 'secret_key' -s index.js -t express"
  },
  "dependencies": {
    "@reportfy/tester": "^1.1.5",
    "express": "^4.17.1"
  }
}

```

O campo ```-k``` é obrigatório, serve para obter seus planos de teste na aplicação e que os relatórios sejam enviados para reportfy.

O campo ```-s``` é obrigatório, serve para obter a aplicação inicial e executá-la para iniciar os testes localmente.

O campo ```-ac``` é obrigatório, chave secreta para leitura de dados que contém criptografia da sua área de trabalho(workspace).

O campo ```-se``` é obrigatório, chave secreta para leitura de dados que contém criptografia da sua área de trabalho(workspace). 

Os frameworks que estão disponíveis para rodar localmente são:
    
 - [Koa](https://koajs.com/)
 - [Express](https://expressjs.com/pt-br/)
 - [HapiJS](https://hapi.dev/)
 - [Restify](http://restify.com/)


## Clientes

Configurações de frameworks são diferenciadas para cada um, segue abaixo configuração simples de cada framework com as suas particularidades.

### Koa
Exemplo base para criação de uma api no framework koa.

Iniciando o projeto.

```sh
$ npm init
```

Instalando dependências

Com npm.
```sh
$ npm install koa koa-body koa-router @reportfy/tester --save
```

Com yarn.
```sh
$ yarn add koa koa-body koa-router @reportfy/tester
```

Arquivo ```index.js``` para inicializar o projeto.

```js
const Koa = require('koa');
const koaBody = require('koa-body');
const app = new Koa();

const Router = require('koa-router');


app.use(koaBody());


// Prefix all routes with: /books
const router = new Router({
    prefix: '/api'
});


router.get('/user', (ctx, next) => {
    ctx.body = {name: 'hello world'}
    next();
});

// Use the Router on the sub route /books
app.use(router.routes());

app.listen(3000);

module.exports = app

```

Executando os testes.

```sh
$ npx reportfy -k sua_chave_aqui' -ac 'access_key', -se 'secret_key' -s  index.js -k koa
```

### Express
Exemplo base para criação de uma api no framework express.

Iniciando o projeto.

```sh
$ npm init
```

Instalando dependências

Com npm.
```sh
$ npm install express @reportfy/tester --save
```

Com yarn.
```sh
$ yarn add express @reportfy/tester
```

Arquivo ```index.js``` para inicializar o projeto.

```js
const express = require('express')
const app = express()

app.use(express.json({}))

app.post('/api/user', (req, res) => {
    res.status(200).json(req.body)
})

app.get('/api/user/:name', (req, res) => {
    res.status(200).json()
})

app.listen(3000, () => console.log('listening http://localhost:3000'))

module.exports = app

```

Executando os testes.

```sh
$ npx reportfy -k sua_chave_aqui' -ac 'access_key', -se 'secret_key' -s  index.js  -k express
```

### HapiJS
Exemplo base para criação de uma api no framework HapiJS.

Iniciando o projeto.

```sh
$ npm init
```

Instalando dependências

Com npm.
```sh
$ npm install @hapi/hapi @reportfy/tester --save
```

Com yarn.
```sh
$ yarn add @hapi/hapi @reportfy/tester
```

Arquivo ```index.js``` para inicializar o projeto.

```js
const Hapi = require('@hapi/hapi')

const server = Hapi.server({
    port: 3000,
    host: 'localhost'
});

server.route({
    method: 'POST',
    path: '/api/user',
    handler: (request, reply) => {
        return request.payload
    }
});


server.start();

module.exports = server

```

Executando os testes.

```sh
$ npx reportfy -k sua_chave_aqui' -ac 'access_key', -se 'secret_key' -s  index.js  -k hapijs
```

### Restify

Exemplo base para criação de uma api no framework restify.

Iniciando o projeto.

```sh
$ npm init
```

Instalando dependências

Com npm.
```sh
$ npm install restify @reportfy/tester --save
```

Com yarn.
```sh
$ yarn add restify @reportfy/tester
```

Arquivo ```index.js``` para inicializar o projeto.

```js
const restify = require('restify');
const server = restify.createServer();

server.get('/api/user', (req, res) => {
    return res.send()
});

server.post('/api/user', (req, res) => {
    return res.send()
});

module.exports = server;

```

Executando os testes.

```sh
$ npx reportfy -k sua_chave_aqui' -ac 'access_key', -se 'secret_key' -s  index.js -k restify
```
