UNPKG

@designliquido/lincones-sqlite

Version:
278 lines 15.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const avaliador_sintatico_1 = require("../fontes/avaliador-sintatico"); const lexador_1 = require("../fontes/lexador"); const tradutor_reverso_sql_ansi_1 = require("../fontes/tradutor/tradutor-reverso-sql-ansi"); describe('Tradutor Reverso (SQL ANSI)', () => { let lexador; let avaliadorSintatico; let tradutor; describe('traduzir()', () => { describe('Cenário de sucesso', () => { beforeEach(() => { lexador = new lexador_1.LexadorSqlAnsi(); avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintaticoSqlAnsi(); tradutor = new tradutor_reverso_sql_ansi_1.TradutorReversoSqlAnsi(); }); it('Criar', () => { const resultadoLexador = lexador.mapear([ "CREATE TABLE clientes (id INT PRIMARY KEY, email VARCHAR(255) NOT NULL)" ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('CRIAR TABELA clientes'); expect(resultado).toContain('id'); expect(resultado).toContain('INTEIRO'); expect(resultado).toContain('CHAVE PRIMÁRIA'); expect(resultado).toContain('email'); expect(resultado).toContain('CARACTERES'); expect(resultado).toContain('NÃO NULO'); }); describe('Alterar tabela', () => { it('Adição de coluna', () => { const resultadoLexador = lexador.mapear([ "ALTER TABLE clientes ADD COLUMN telefone VARCHAR(20)" ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('ALTERAR TABELA clientes'); expect(resultado).toContain('ADICIONAR COLUNA'); expect(resultado).toContain('telefone'); expect(resultado).toContain('CARACTERES'); }); it('Adição de coluna com NOT NULL', () => { const resultadoLexador = lexador.mapear([ "ALTER TABLE produtos ADD COLUMN categoria TEXT NOT NULL" ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('ALTERAR TABELA produtos'); expect(resultado).toContain('ADICIONAR COLUNA'); expect(resultado).toContain('categoria'); expect(resultado).toContain('NÃO NULO'); }); it('Remoção de coluna', () => { const resultadoLexador = lexador.mapear([ "ALTER TABLE clientes DROP COLUMN telefone" ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('ALTERAR TABELA clientes'); expect(resultado).toContain('REMOVER COLUNA'); expect(resultado).toContain('telefone'); }); it('Alterar coluna', () => { const resultadoLexador = lexador.mapear([ "ALTER TABLE produtos ALTER COLUMN preco NUMERIC" ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('ALTERAR TABELA produtos'); expect(resultado).toContain('ALTERAR COLUNA'); expect(resultado).toContain('preco'); }); }); it('Atualizar', () => { const resultadoLexador = lexador.mapear([ 'UPDATE clientes SET nome = "João Pedro", idade = 31, ativo = TRUE, casado = FALSE WHERE id = 1' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('ATUALIZAR clientes'); expect(resultado).toContain('DEFINIR'); expect(resultado).toContain('nome'); expect(resultado).toContain('João Pedro'); expect(resultado).toContain('idade'); expect(resultado).toContain('31'); expect(resultado).toContain('ativo'); expect(resultado).toContain('VERDADEIRO'); expect(resultado).toContain('casado'); expect(resultado).toContain('FALSO'); expect(resultado).toContain('ONDE'); expect(resultado).toContain('id'); }); it('Atualizar com múltiplas condições', () => { const resultadoLexador = lexador.mapear([ 'UPDATE produtos SET preco = 100 WHERE categoria = "eletronicos" AND estoque > 0' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('ATUALIZAR produtos'); expect(resultado).toContain('DEFINIR'); expect(resultado).toContain('ONDE'); expect(resultado).toContain('categoria'); expect(resultado).toContain('estoque'); }); it('Atualizar sem condições', () => { const resultadoLexador = lexador.mapear([ 'UPDATE clientes SET ativo = FALSE' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('ATUALIZAR clientes'); expect(resultado).toContain('DEFINIR'); expect(resultado).not.toContain('ONDE'); }); it('Inserir', () => { const resultadoLexador = lexador.mapear([ 'INSERT INTO clientes (nome, idade, ativo, email) VALUES ("Pernalonga", 18, TRUE, "pernalonga@warnerbros.com")' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('INSERIR EM clientes'); expect(resultado).toContain('VALORES'); expect(resultado).toContain('Pernalonga'); expect(resultado).toContain('18'); expect(resultado).toContain('VERDADEIRO'); expect(resultado).toContain('pernalonga@warnerbros.com'); }); it('Inserir com valores booleanos', () => { const resultadoLexador = lexador.mapear([ 'INSERT INTO usuarios (nome, ativo, admin) VALUES ("Maria", TRUE, FALSE)' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('INSERIR EM usuarios'); expect(resultado).toContain('Maria'); expect(resultado).toContain('VERDADEIRO'); expect(resultado).toContain('FALSO'); }); it('Excluir', () => { const resultadoLexador = lexador.mapear([ 'DELETE FROM clientes WHERE id = 2' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('EXCLUIR DE clientes'); expect(resultado).toContain('ONDE'); expect(resultado).toContain('id'); expect(resultado).toContain('2'); }); it('Excluir sem condições', () => { const resultadoLexador = lexador.mapear([ 'DELETE FROM temporarios' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('EXCLUIR DE temporarios'); expect(resultado).not.toContain('ONDE'); }); it('Excluir com múltiplas condições', () => { const resultadoLexador = lexador.mapear([ 'DELETE FROM produtos WHERE categoria = "obsoleto" AND estoque = 0' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('EXCLUIR DE produtos'); expect(resultado).toContain('ONDE'); expect(resultado).toContain('categoria'); expect(resultado).toContain('estoque'); }); it('Selecionar todas as colunas', () => { const resultadoLexador = lexador.mapear([ 'SELECT * FROM clientes' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('SELECIONAR *'); expect(resultado).toContain('DE clientes'); }); it('Selecionar colunas específicas', () => { const resultadoLexador = lexador.mapear([ 'SELECT nome, email, idade FROM clientes' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('SELECIONAR'); expect(resultado).toContain('nome'); expect(resultado).toContain('email'); expect(resultado).toContain('idade'); expect(resultado).toContain('DE clientes'); }); it('Selecionar com condição', () => { const resultadoLexador = lexador.mapear([ 'SELECT nome, email FROM clientes WHERE idade >= 18' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('SELECIONAR'); expect(resultado).toContain('nome'); expect(resultado).toContain('email'); expect(resultado).toContain('ONDE'); expect(resultado).toContain('idade'); }); it('Selecionar com múltiplas condições', () => { const resultadoLexador = lexador.mapear([ 'SELECT * FROM produtos WHERE preco > 100 AND categoria = "eletronicos"' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('SELECIONAR *'); expect(resultado).toContain('ONDE'); expect(resultado).toContain('preco'); expect(resultado).toContain(' E '); expect(resultado).toContain('categoria'); }); it('Selecionar com operadores de comparação', () => { const resultadoLexador = lexador.mapear([ 'SELECT * FROM vendas WHERE valor < 1000' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('SELECIONAR *'); expect(resultado).toContain('ONDE'); expect(resultado).toContain('valor'); }); it('Excluir tabela', () => { const resultadoLexador = lexador.mapear([ 'DROP TABLE clientes_antigos' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('REMOVER TABELA clientes_antigos'); }); it('Excluir visão', () => { const resultadoLexador = lexador.mapear([ 'DROP VIEW relatorio_vendas' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('REMOVER VISAO relatorio_vendas'); }); it('Múltiplos comandos', () => { const resultadoLexador = lexador.mapear([ 'CREATE TABLE usuarios (id INT PRIMARY KEY);', 'INSERT INTO usuarios (id) VALUES (1);', 'SELECT * FROM usuarios;' ]); const resultadoAvaliadorSintatico = avaliadorSintatico.analisar(resultadoLexador); const resultado = tradutor.traduzir(resultadoAvaliadorSintatico.comandos); expect(resultado).toBeTruthy(); expect(resultado).toContain('CRIAR TABELA usuarios'); expect(resultado).toContain('INSERIR EM usuarios'); expect(resultado).toContain('SELECIONAR *'); }); }); }); }); //# sourceMappingURL=tradutor-reverso-sql-ansi.test.js.map