Administração do sistema

Testes unitários com o Telescope Script Engine

RT.FAQ-90946
O Telescope Script Engine possui um conjunto de comandos para a execução de testes unitários.
Os comandos tem uma semelhança com comandos de outras bibliotecas de testes unitários como o JUnit.

Para que os testes sejam devidamente reportados, deve-se definir que o script está executando testes através do comando:
set testing on;

Os comandos que executam os testes propriamente ditos são:

ASSERT-TRUE

Testa se uma expressão é verdadeira:
assert-true 'Mensagem ' where boolean-expression;
Retorna:

Exemplo:
assert-true 'Usuário admin cadastrado!'
where exists (select 1 from usuarios where login = 'admin');

ASSERT-FALSE

Testa se uma expressão é false:
assert-false 'Mensagem ' where boolean-expression;
Retorna:

Exemplo:
assert-false 'Todos usuários tem login!'
where exists (select 1 from usuarios where login is null);

ASSERT-EQUALS

Compara valores esperados com retornados e registra erro caso os valores não combinarem:
assert-equals 'Mensagem 1', esperado1, expr1
[,'Mensagem 2', esperado2, expr2 ...] 
[from ...]
[where ...];
Retorna
Exemplo:
assert-equals 'Saldos diarios: Saldo anterior', 150, saldo_anterior
, 'Total créditos', 0, total_creditos
, 'Total débitos', 120, total_debitos
, 'Saldo final', 30, saldo
from saldos_diarios_caixas
where caixa_id = ${cx1}
and data = '2018-02-15';

ASSERT-NOT-EQUALS

Exatamente igual ao anterior, mas retornando:

ASSERT-ERROR

Determina que se espera que o próxima comando gere uma mensagem de erro:
assert-error 'Mensagem';
A execução do comando seguinte retorna:

Exemplo:
assert-error 'Não permite incluir produto cancelado';

ins itens_pedidos
set produto_id = ${produtocancelado}
, pedido_id = ... ;

ASSERT-NULL 'Mensagem' expr [from ...] [where ...];

Executa comando
select expr [from ...] [where ...];
Busca todas as linhas.
ERR Se alguma linha retornar coluna não nula
OK Se nenhuma linha retornar coluna nula

ASSERT-NOT-NULL 'Mensagem' expr [from ...] [where ...];

Idem anterior mas testando not null.

ASSERT-REGRESSION

Compara o resultados de um SQL com o que foi obtido anteriormente.
Sintaxe:
assert-regression 'Mensagem'
, 'hash-esperado'
, expr [, expr] ...
[from tabela
 join ...
 where ...
 order by ...];

Este comando gera um hash juntando todas as informações obtidas em uma consulta SQL e compara com um hash esperado.
Este teste não verifica se os resultados estão corretos mas identifica alguma mudança no comportamento.
Para obter o HASH esperado, execute o comando a primeira vez de forma a gerar um erro e utiliza o hash obtido como o esperado no script.

Exemplo:
assert-regression 'Regressão dos horários da agenda'
, '07cd1efd96a24d2ca5bbe5f3acb8e785b3bafc31'
, dia_semana, entrada_1, saida_1, entrada_2, saida_2, adicional
from horarios_trabalho h
join jornadas_trabalho j on j.id = h.jornada_id
where j.jornada_trabalho = 'J1';

Importante
A expressão SQL utilizada não pode incluir expressões que podem variar naturalmente nas execuções distintas como:

SYSDATE

Existem situações de rotinas que utilizam a data do sistema na lógica do negócio. Nestes casos, pode necessário forçar uma data para que seja possível verificar os resultados da forma apropriada.
O comando SYSDATE permite estabelecer um data e hora que passará a ser utilizada como data/hora correntes durante a execução do teste.

Syntaxe:
sysdate yyyy-mm-dd hh:mm:ss;

Exemplo:
sysdate 2018-01-01 08:00:00;