# NANDO Tests
## Setup
* git checkout feature/nando_testing (toconline)
* ```bundle update pg```
* Aqui deve ser preciso usar o install_name_tool
* ```gem install nando```
* ```nando -h```
## criar db de testes
* ```createdb test_nando -U toconline```
* se tudo estiver ok => ```nando up```
---
## Teste #1 - Criar uma migração com 1 função (up & down)
Vais criar 1 migração que atualize 1 função. É preciso escrever tanto o up como o down. Os passos com cada ferramenta vão estar descritos
### Nando
* ```nando new NandoTest1```
* ```nando update <path to migration file> -f db/functions/billing/reports/get_customer_balance.sql```
* (indo ao ficheiro, o up deve estar preenchido com a função atualizada, com o raise notice, e o down deve ter as definições anteriores)
### ActiveRecord
* ```rails g migration ARTest1```
* se falhar => copiar uma migração anterior "à mão" e apagar o conteúdo antes de começar
* copiar o conteúdo da função em "db/functions/billing/reports/get_customer_balance.sql" para o up (dentro de um execute)
* ```git checkout master```
* copiar o conteúdo da função em "db/functions/billing/reports/get_customer_balance.sql" para o down (dentro de um execute)
* ```git checkout feature/nando_testing```
---
## Teste #2 - Criar uma migração com 3 funções (up & down)
Vais criar 1 migração que atualize 3 funções. É preciso escrever tanto o up como o down. Os passos com cada ferramenta vão estar descritos
### Funções a atualizar:
db/functions/billing/reports/get_customer_balance.sql
db/functions/billing/reports/get_map_receipts.sql
db/functions/billing/reports/get_pending_quotes.sql
### Nando
* ```nando new NandoTest2```
* ```nando update <path to migration file> -f ```
* dar paste da lista de funções acima
* (indo ao ficheiro, o up deve estar preenchido com as funções atualizadas, com o raise notice, e o down deve ter as definições anteriores)
### ActiveRecord
* ```rails g migration ARTest2```
* se falhar => copiar uma migração anterior "à mão" e apagar o conteúdo antes de começar
* copiar o conteúdo das 3 funções para o up (dentro de executes separado)
* ```git checkout master```
* copiar o conteúdo das 3 funções para o down (dentro de executes separado)
* ```git checkout feature/nando_testing```
---
## Teste #3 - Criar uma migração com 1 alteração de esquema a todas as
### Nando
* ```nando new NandoTest3 -t MigrationWithoutTransaction```
* criar 1 ciclo migrate_companies no up (podes copiar de uma migração anterior)
* criar 1 ciclo rollback_companies no down (podes copiar de uma migração anterior)
* inserir o output do comando diff nos ciclos
* ```nando diff schema_1 schema_2``` (dizer 'y' no input)
### ActiveRecord
* ```rails g ARTest3```
* se falhar => copiar uma migração anterior "à mão" e apagar o conteúdo antes de começar
* criar 1 ciclo migrate_companies no up (podes copiar de uma migração anterior)
* criar 1 ciclo rollback_companies no down (podes copiar de uma migração anterior)
* inserir no ciclo do up um ```ALTER TABLE``` que adicione uma coluna chamada "name", do tipo "text", que seja NOT NULL
* inserir no ciclo do down um ```ALTER TABLE``` que dê drop à coluna chamada "name"
---
## limpar db de testes
* ```dropdb test_nando```
* ```gem uninstall nando```