From f1d42c988432d01e90049f30159ac247e39b137b Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Wed, 1 Nov 2023 19:54:22 -0300 Subject: [PATCH 01/11] fix(#25): Adicionando .ambiente para funcionar os testes de buscaVariavelAmbienteEmArquivo corretamente --- .ambiente | 2 ++ infraestrutura/utilidades/variaveis-ambiente.ts | 1 + testes/utilidades/devolve-variavel-ambiente.test.ts | 10 +++++----- 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 .ambiente diff --git a/.ambiente b/.ambiente new file mode 100644 index 0000000..a296e7e --- /dev/null +++ b/.ambiente @@ -0,0 +1,2 @@ +chaveSecreta=MinhaChave +session=False \ No newline at end of file diff --git a/infraestrutura/utilidades/variaveis-ambiente.ts b/infraestrutura/utilidades/variaveis-ambiente.ts index 29a5ced..3da0d6d 100644 --- a/infraestrutura/utilidades/variaveis-ambiente.ts +++ b/infraestrutura/utilidades/variaveis-ambiente.ts @@ -11,6 +11,7 @@ export const lerTextoDeArquivo = (caminho: string) => { export const buscarVariavelAmbienteEmArquivo = (nomeVariavel: string): string | undefined => { const linhas: string[] = lerTextoDeArquivo(caminho.join(process.cwd(), '.ambiente')); + console.log(nomeVariavel, linhas) for (const linha of linhas) { if (linha.startsWith(`${nomeVariavel}=`)) { return linha.split('=')[1].trim(); diff --git a/testes/utilidades/devolve-variavel-ambiente.test.ts b/testes/utilidades/devolve-variavel-ambiente.test.ts index 27b87ab..7de4f76 100644 --- a/testes/utilidades/devolve-variavel-ambiente.test.ts +++ b/testes/utilidades/devolve-variavel-ambiente.test.ts @@ -1,10 +1,10 @@ +import fs from 'fs'; +import path from 'path'; import { - lerTextoDeArquivo, buscarVariavelAmbienteEmArquivo, - devolverVariavelAmbiente + devolverVariavelAmbiente, + lerTextoDeArquivo } from '../../infraestrutura/utilidades/variaveis-ambiente'; -import fs from 'fs'; -import path from 'path' describe('lerTextoDeArquivo', () => { it('deve ler um arquivo de texto e retornar suas linhas', () => { @@ -27,7 +27,7 @@ describe('lerTextoDeArquivo', () => { }); describe('buscaVariavelAmbienteEmArquivo', () => { - it.skip('deve retornar o valor da variável de ambiente se ela existir no arquivo', () => { + it('deve retornar o valor da variável de ambiente se ela existir no arquivo', () => { const valor = buscarVariavelAmbienteEmArquivo('chaveSecreta'); expect(valor).toBe('MinhaChave') }); From 3b2460b5e78de4389abaa19bcb5d7c0d9b15912f Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Wed, 1 Nov 2023 19:57:10 -0300 Subject: [PATCH 02/11] fix(#25): Removendo skips --- infraestrutura/utilidades/variaveis-ambiente.ts | 1 - .../infraestrutura/preprocessadores/lmht-parciais.test.ts | 2 +- testes/utilidades/devolve-variavel-ambiente.test.ts | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/infraestrutura/utilidades/variaveis-ambiente.ts b/infraestrutura/utilidades/variaveis-ambiente.ts index 3da0d6d..29a5ced 100644 --- a/infraestrutura/utilidades/variaveis-ambiente.ts +++ b/infraestrutura/utilidades/variaveis-ambiente.ts @@ -11,7 +11,6 @@ export const lerTextoDeArquivo = (caminho: string) => { export const buscarVariavelAmbienteEmArquivo = (nomeVariavel: string): string | undefined => { const linhas: string[] = lerTextoDeArquivo(caminho.join(process.cwd(), '.ambiente')); - console.log(nomeVariavel, linhas) for (const linha of linhas) { if (linha.startsWith(`${nomeVariavel}=`)) { return linha.split('=')[1].trim(); diff --git a/testes/testes-unitarios/infraestrutura/preprocessadores/lmht-parciais.test.ts b/testes/testes-unitarios/infraestrutura/preprocessadores/lmht-parciais.test.ts index 5933cd0..9c97a24 100644 --- a/testes/testes-unitarios/infraestrutura/preprocessadores/lmht-parciais.test.ts +++ b/testes/testes-unitarios/infraestrutura/preprocessadores/lmht-parciais.test.ts @@ -38,7 +38,7 @@ describe('Preprocessador de parciais em LMHT', () => { expect((resultado as Error)?.message).toBe('Em Parcial o atributo nome não foi informado'); }); - it.skip('Deve retornar um Error por não encontrar o diretorio error', () => { + it('Deve retornar um Error por não encontrar o diretorio error', () => { const texto = ``; jest.spyOn(preProcessador, 'diretorioParcial', 'get').mockReturnValue('error'); diff --git a/testes/utilidades/devolve-variavel-ambiente.test.ts b/testes/utilidades/devolve-variavel-ambiente.test.ts index 7de4f76..127280b 100644 --- a/testes/utilidades/devolve-variavel-ambiente.test.ts +++ b/testes/utilidades/devolve-variavel-ambiente.test.ts @@ -38,7 +38,7 @@ describe('buscaVariavelAmbienteEmArquivo', () => { }) describe('devolveVariavelAmbiente', () => { - it.skip('deve retornar o valor da variável de ambiente se ela existir', () => { + it('deve retornar o valor da variável de ambiente se ela existir', () => { const valor = devolverVariavelAmbiente('chaveSecreta'); expect(valor).toBe('MinhaChave') }); From e656327382cbd8b5864e7cf3a87aeeeb07059f73 Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Mon, 6 Nov 2023 19:26:42 -0300 Subject: [PATCH 03/11] =?UTF-8?q?fix(#25):=20Atualizar=20depend=C3=AAncias?= =?UTF-8?q?=20e=20adicionar=20teste=20de=20valida=C3=A7=C3=A3o=20XML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 156 ++++++++++++------------- testes/ajudadores/verifica-xml.test.ts | 17 +++ testes/ajudadores/verifica-xml.ts | 9 +- yarn.lock | 8 +- 4 files changed, 101 insertions(+), 89 deletions(-) create mode 100644 testes/ajudadores/verifica-xml.test.ts diff --git a/package.json b/package.json index f7b45e3..2ca4167 100644 --- a/package.json +++ b/package.json @@ -1,79 +1,79 @@ { - "name": "liquido", - "description": "Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português", - "version": "0.0.11", - "author": "Leonel Sanches da Silva", - "contributors": [ - { - "name": "Leonel Sanches da Silva", - "url": "https://www.linkedin.com/in/leonelsanchesdasilva/" - }, - { - "name": "Italo Brito Brandão", - "url": "https://github.com/ItaloCobains" - } - ], - "license": "MIT", - "publishConfig": { - "registry": "https://registry.npmjs.org/" - }, - "scripts": { - "empacotar": "rimraf ./dist && tsc && copyfiles -V ./README.md ./dist", - "publicar-npm": "npm publish --access public", - "iniciar": "nodemon", - "lint-ts": "npx tslint -c tslint.json 'infraestrutura/*.ts' '*.ts' 'interfaces/*.ts'", - "lint": "eslint . --ext .ts", - "prettier-format": "prettier --config .prettierrc infraestrutura/*.ts interfaces/*.ts *.ts --write", - "testes": "jest --coverage", - "testes:w": "jest --runInBand --watchAll", - "predev": "npm run swagger", - "prebuild": "npm run swagger", - "dev": "concurrently \"nodemon\" \"nodemon -x tsoa spec\"", - "swagger": "tsoa spec" - }, - "dependencies": { - "@designliquido/delegua-node": "^0.26.2", - "@designliquido/foles": "^0.5.1", - "@designliquido/lincones-sqlite": "^0.0.2", - "@designliquido/lmht-js": "^0.3.1", - "body-parser": "^1.20.1", - "cookie-parser": "^1.4.6", - "cors": "^2.8.5", - "dotenv": "^16.0.3", - "express": "^4.18.1", - "fast-xml-parser": "^4.2.7", - "handlebars": "^4.7.7", - "helmet": "^6.0.0", - "jwt-simple": "^0.5.6", - "morgan": "^1.10.0", - "nodemon": "^2.0.22", - "passport": "^0.6.0", - "passport-jwt": "^4.0.1" - }, - "devDependencies": { - "@types/body-parser": "^1.19.2", - "@types/cookie-parser": "^1.4.3", - "@types/cors": "^2.8.12", - "@types/dotenv": "^8.2.0", - "@types/express": "^4.17.14", - "@types/jest": "^29.2.3", - "@types/jwt-simple": "^0.5.33", - "@types/morgan": "^1.9.3", - "@types/node": "^17.0.13", - "@types/passport": "^1.0.11", - "@types/passport-jwt": "^3.0.8", - "@typescript-eslint/eslint-plugin": "^5.44.0", - "@typescript-eslint/parser": "^5.44.0", - "concurrently": "^7.6.0", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.3.1", - "prettier": "^2.8.0", - "release-it": "^15.5.0", - "rimraf": "^3.0.2", - "ts-jest": "^29.0.3", - "ts-node": "^10.9.1", - "typescript": "^4.6.3" - } -} + "name": "liquido", + "description": "Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português", + "version": "0.0.11", + "author": "Leonel Sanches da Silva", + "contributors": [ + { + "name": "Leonel Sanches da Silva", + "url": "https://www.linkedin.com/in/leonelsanchesdasilva/" + }, + { + "name": "Italo Brito Brandão", + "url": "https://github.com/ItaloCobains" + } + ], + "license": "MIT", + "publishConfig": { + "registry": "https://registry.npmjs.org/" + }, + "scripts": { + "empacotar": "rimraf ./dist && tsc && copyfiles -V ./README.md ./dist", + "publicar-npm": "npm publish --access public", + "iniciar": "nodemon", + "lint-ts": "npx tslint -c tslint.json 'infraestrutura/*.ts' '*.ts' 'interfaces/*.ts'", + "lint": "eslint . --ext .ts", + "prettier-format": "prettier --config .prettierrc infraestrutura/*.ts interfaces/*.ts *.ts --write", + "testes": "jest --coverage", + "testes:w": "jest --runInBand --watchAll", + "predev": "npm run swagger", + "prebuild": "npm run swagger", + "dev": "concurrently \"nodemon\" \"nodemon -x tsoa spec\"", + "swagger": "tsoa spec" + }, + "dependencies": { + "@designliquido/delegua-node": "^0.26.2", + "@designliquido/foles": "^0.5.1", + "@designliquido/lincones-sqlite": "^0.0.2", + "@designliquido/lmht-js": "^0.3.1", + "body-parser": "^1.20.1", + "cookie-parser": "^1.4.6", + "cors": "^2.8.5", + "dotenv": "^16.0.3", + "express": "^4.18.1", + "fast-xml-parser": "^4.3.2", + "handlebars": "^4.7.7", + "helmet": "^6.0.0", + "jwt-simple": "^0.5.6", + "morgan": "^1.10.0", + "nodemon": "^2.0.22", + "passport": "^0.6.0", + "passport-jwt": "^4.0.1" + }, + "devDependencies": { + "@types/body-parser": "^1.19.2", + "@types/cookie-parser": "^1.4.3", + "@types/cors": "^2.8.12", + "@types/dotenv": "^8.2.0", + "@types/express": "^4.17.14", + "@types/jest": "^29.2.3", + "@types/jwt-simple": "^0.5.33", + "@types/morgan": "^1.9.3", + "@types/node": "^17.0.13", + "@types/passport": "^1.0.11", + "@types/passport-jwt": "^3.0.8", + "@typescript-eslint/eslint-plugin": "^5.44.0", + "@typescript-eslint/parser": "^5.44.0", + "concurrently": "^7.6.0", + "eslint": "^8.28.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.3.1", + "prettier": "^2.8.0", + "release-it": "^15.5.0", + "rimraf": "^3.0.2", + "ts-jest": "^29.0.3", + "ts-node": "^10.9.1", + "typescript": "^4.6.3" + } +} \ No newline at end of file diff --git a/testes/ajudadores/verifica-xml.test.ts b/testes/ajudadores/verifica-xml.test.ts new file mode 100644 index 0000000..1751430 --- /dev/null +++ b/testes/ajudadores/verifica-xml.test.ts @@ -0,0 +1,17 @@ +import * as xmlParser from 'fast-xml-parser'; +import { VerificaXml } from './verifica-xml'; + + +describe('VerificaXml', () => { + it('deve retornar true para um xml válido', async () => { + const xml = '' + const resultado = VerificaXml(xml) + expect(resultado).toBeTruthy() + }) + it('deve retornar false para um xml inválido', async () => { + const xml = '' + const resultado = VerificaXml(xml) + expect(resultado instanceof Object).toBeTruthy() + expect((resultado as xmlParser.ValidationError).err.code).toEqual('InvalidTag') + }) +}) \ No newline at end of file diff --git a/testes/ajudadores/verifica-xml.ts b/testes/ajudadores/verifica-xml.ts index 0d55225..3630c08 100644 --- a/testes/ajudadores/verifica-xml.ts +++ b/testes/ajudadores/verifica-xml.ts @@ -1,10 +1,5 @@ import * as xmlParser from 'fast-xml-parser'; -export const VerificaXml = (xml: string): boolean => { - try { - xmlParser.XMLValidator.validate(xml); - return true; - } catch (err) { - return false; - } +export const VerificaXml = (xml: string): boolean | xmlParser.ValidationError => { + return xmlParser.XMLValidator.validate(xml); } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 34697d8..6c4550d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2659,10 +2659,10 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-xml-parser@^4.2.7: - version "4.2.7" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz#871f2ca299dc4334b29f8da3658c164e68395167" - integrity sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig== +fast-xml-parser@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz#761e641260706d6e13251c4ef8e3f5694d4b0d79" + integrity sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg== dependencies: strnum "^1.0.5" From 5a67dc0fc504fcb3b59bf59a9336f12b560df361 Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Mon, 6 Nov 2023 19:41:30 -0300 Subject: [PATCH 04/11] =?UTF-8?q?fix(#25):=20Atualizar=20vari=C3=A1veis=20?= =?UTF-8?q?=E2=80=8B=E2=80=8Bde=20ambiente=20e=20testes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ambiente | 4 +++- .../utilidades/variaveis-ambiente.ts | 4 ++-- testes/utilidades/autenticacao.test.ts | 22 +++++++++++++++++++ .../devolve-variavel-ambiente.test.ts | 10 +++++++++ 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 testes/utilidades/autenticacao.test.ts diff --git a/.ambiente b/.ambiente index a296e7e..024722c 100644 --- a/.ambiente +++ b/.ambiente @@ -1,2 +1,4 @@ chaveSecreta=MinhaChave -session=False \ No newline at end of file +session=Falso +variavelTrue=verdadeiro +variavelFalse=falso \ No newline at end of file diff --git a/infraestrutura/utilidades/variaveis-ambiente.ts b/infraestrutura/utilidades/variaveis-ambiente.ts index 29a5ced..8815ac2 100644 --- a/infraestrutura/utilidades/variaveis-ambiente.ts +++ b/infraestrutura/utilidades/variaveis-ambiente.ts @@ -22,8 +22,8 @@ export const buscarVariavelAmbienteEmArquivo = (nomeVariavel: string): string | export const devolverVariavelAmbiente = (nomeVariavel: string): string | boolean => { const valor = process.env[nomeVariavel] || buscarVariavelAmbienteEmArquivo(nomeVariavel); if (!valor) throw new Error(`Variável de ambiente ${nomeVariavel} não encontrada`); - if (valor === 'true' || valor === 'True') return true; - if (valor === 'false' || valor === 'False') return false; + if (valor === 'verdadeiro' || valor === 'Verdadeiro') return true; + if (valor === 'falso' || valor === 'Falso') return false; return valor; }; diff --git a/testes/utilidades/autenticacao.test.ts b/testes/utilidades/autenticacao.test.ts new file mode 100644 index 0000000..e5027b7 --- /dev/null +++ b/testes/utilidades/autenticacao.test.ts @@ -0,0 +1,22 @@ +import Autenticacao from '../../infraestrutura/utilidades/autenticacao'; + +describe('Autenticacao', () => { + it('deve retornar um objeto com as funções initialize e authenticate', async () => { + const autenticacao = Autenticacao() + expect(autenticacao).toHaveProperty('initialize') + expect(autenticacao).toHaveProperty('authenticate') + }) + + it('deve retornar um objeto com a função initialize que retorna uma função', async () => { + const autenticacao = Autenticacao() + const initialize = autenticacao.initialize() + expect(typeof initialize).toBe('function') + }) + + it('deve retornar um objeto com a função authenticate que retorna uma função', async () => { + const autenticacao = Autenticacao() + const authenticate = autenticacao.authenticate() + expect(typeof authenticate).toBe('function') + }) + +}); diff --git a/testes/utilidades/devolve-variavel-ambiente.test.ts b/testes/utilidades/devolve-variavel-ambiente.test.ts index 127280b..3dc5e3c 100644 --- a/testes/utilidades/devolve-variavel-ambiente.test.ts +++ b/testes/utilidades/devolve-variavel-ambiente.test.ts @@ -45,4 +45,14 @@ describe('devolveVariavelAmbiente', () => { it('deve retornar um erro se a variável de ambiente não existir', () => { expect(() => devolverVariavelAmbiente('chaveSecretaInexistente')).toThrowError('Variável de ambiente chaveSecretaInexistente não encontrada'); }); + + it('deve retornar true se a variável de ambiente for true', () => { + const valor = devolverVariavelAmbiente('variavelTrue'); + expect(valor).toBe(true) + }) + + it('deve retornar false se a variável de ambiente for false', () => { + const valor = devolverVariavelAmbiente('variavelFalse'); + expect(valor).toBe(false) + }) }); \ No newline at end of file From 77cb3e5b75ea707c87f8ad84feaf8372a4b9d7db Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Mon, 6 Nov 2023 20:09:41 -0300 Subject: [PATCH 05/11] fix(#25): Corrigindo retorno de parser JSON --- liquido.ts | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/liquido.ts b/liquido.ts index 18af921..6edb6a0 100644 --- a/liquido.ts +++ b/liquido.ts @@ -2,11 +2,6 @@ import * as sistemaDeArquivos from 'node:fs'; import * as caminho from 'node:path'; import { AvaliadorSintatico } from '@designliquido/delegua/fontes/avaliador-sintatico'; -import { - Lexador, - Simbolo -} from '@designliquido/delegua/fontes/lexador'; -import { RetornoInterpretador } from '@designliquido/delegua/fontes/interpretador'; import { AcessoMetodo, Chamada, @@ -18,15 +13,20 @@ import { import { Expressao } from '@designliquido/delegua/fontes/declaracoes'; import { DeleguaFuncao } from '@designliquido/delegua/fontes/estruturas'; import { VariavelInterface } from '@designliquido/delegua/fontes/interfaces'; +import { RetornoInterpretador } from '@designliquido/delegua/fontes/interpretador'; +import { + Lexador, + Simbolo +} from '@designliquido/delegua/fontes/lexador'; +import { Importador } from '@designliquido/delegua-node/fontes/importador'; +import { Interpretador } from '@designliquido/delegua-node/fontes/interpretador'; +import { FolEs } from '@designliquido/foles'; import { Resposta } from './infraestrutura'; import { FormatadorLmht } from './infraestrutura/formatadores'; import { ProvedorLincones } from './infraestrutura/provedores'; import { Roteador } from './infraestrutura/roteador'; import { LiquidoInterface, RetornoMiddleware } from './interfaces'; -import { Importador } from '@designliquido/delegua-node/fontes/importador'; -import { Interpretador } from '@designliquido/delegua-node/fontes/interpretador'; -import { FolEs } from '@designliquido/foles'; /** * O núcleo do framework. @@ -88,7 +88,7 @@ export class Liquido implements LiquidoInterface { if (!sistemaDeArquivos.existsSync(`./${this.diretorioEstatico}/css`)) { sistemaDeArquivos.mkdirSync(`./${this.diretorioEstatico}/css`, { recursive: true }); } - + for (const arquivo of arquivosEstilos) { const teste = this.foles.converterParaCss(arquivo); const arquivoDestino = caminho.join(process.cwd(), `./${this.diretorioEstatico}/css`, arquivo.replace('estilos', '').replace('.foles', '.css')); @@ -203,14 +203,14 @@ export class Liquido implements LiquidoInterface { const listaDeItems = sistemaDeArquivos.readdirSync('./estilos'); const arquivosDescobertos = []; - + listaDeItems.forEach((diretorioOuArquivo) => { const caminhoAbsoluto = caminho.join('./estilos', diretorioOuArquivo); if (caminhoAbsoluto.endsWith('.foles')) { arquivosDescobertos.push(caminhoAbsoluto); } }); - + return arquivosDescobertos; } catch (erro: any) { console.log(`Pulando descoberta de estilos. Causa: ${erro}`); @@ -352,7 +352,13 @@ export class Liquido implements LiquidoInterface { ): Promise<{ corpoRetorno: any; statusHttp: number }> { // O resultado que interessa é sempre o último. // Ele vem como string, e precisa ser desserializado para ser usado. - const { valor } = JSON.parse(retornoInterpretador.resultado.pop()); + + let valor: any; + try { + valor = JSON.parse(retornoInterpretador.resultado.pop()).valor; + } catch (err) { + console.log(`Erro ao desserializar JSON: ${err}`); + } let statusHttp: number = 200; if (valor.campos.statusHttp) { From 8408a31b769eb59526add7f22b71230cc7e06064 Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Mon, 6 Nov 2023 20:26:37 -0300 Subject: [PATCH 06/11] Update delegua version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ca4167..24c4019 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "swagger": "tsoa spec" }, "dependencies": { - "@designliquido/delegua-node": "^0.26.2", + "@designliquido/delegua-node": "^0.26.3", "@designliquido/foles": "^0.5.1", "@designliquido/lincones-sqlite": "^0.0.2", "@designliquido/lmht-js": "^0.3.1", From 48ebc25973a109d9fcd6b9ad7e607b0cb70308a3 Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Mon, 6 Nov 2023 21:30:46 -0300 Subject: [PATCH 07/11] Teste router --- infraestrutura/roteador/index.ts | 20 +++-- liquido.ts | 7 +- rotas/blog/inicial.delegua | 4 +- testes/infraestrutura/roteador.test.ts | 106 +++++++++++++++++++++++++ yarn.lock | 18 ++--- 5 files changed, 127 insertions(+), 28 deletions(-) create mode 100644 testes/infraestrutura/roteador.test.ts diff --git a/infraestrutura/roteador/index.ts b/infraestrutura/roteador/index.ts index 564e5e6..9abcf17 100644 --- a/infraestrutura/roteador/index.ts +++ b/infraestrutura/roteador/index.ts @@ -3,13 +3,13 @@ import cookieParser from 'cookie-parser'; import cors from 'cors'; import express, { NextFunction, Request, Response } from 'express'; import helmet from 'helmet'; +import jwt from 'jwt-simple'; import morgan from 'morgan'; -import jwt from 'jwt-simple' import { VariavelInterface } from '@designliquido/delegua/fontes/interfaces'; -import autenticacao from '../utilidades/autenticacao' import users from '../../usuarios'; +import autenticacao from '../utilidades/autenticacao'; import { devolverVariavelAmbiente } from '../utilidades/variaveis-ambiente'; @@ -17,14 +17,14 @@ export class Roteador { aplicacao: express.Express; porta: number; - private morgan = false; - private helmet = false; - private expressJson = false; - private cookieParser = false; - private bodyParser = false; + morgan = false; + helmet = false; + expressJson = false; + cookieParser = false; + bodyParser = false; - private cors = false; - private passport = false; + cors = false; + passport = false; constructor() { this.aplicacao = express(); @@ -175,8 +175,6 @@ export class Roteador { adicionandoRotaToken() { - - this.aplicacao.post("/token", (req: Request, res: Response) => { if (req.body.email && req.body.senha) { const { email, senha } = req.body; diff --git a/liquido.ts b/liquido.ts index 6edb6a0..0547197 100644 --- a/liquido.ts +++ b/liquido.ts @@ -353,12 +353,7 @@ export class Liquido implements LiquidoInterface { // O resultado que interessa é sempre o último. // Ele vem como string, e precisa ser desserializado para ser usado. - let valor: any; - try { - valor = JSON.parse(retornoInterpretador.resultado.pop()).valor; - } catch (err) { - console.log(`Erro ao desserializar JSON: ${err}`); - } + const { valor } = JSON.parse(retornoInterpretador.resultado.pop()); let statusHttp: number = 200; if (valor.campos.statusHttp) { diff --git a/rotas/blog/inicial.delegua b/rotas/blog/inicial.delegua index 000bc62..241efa9 100644 --- a/rotas/blog/inicial.delegua +++ b/rotas/blog/inicial.delegua @@ -1,3 +1,3 @@ -liquido.rotaGet(funcao(requisicao, resposta) { - resposta.lmht() +liquido rotaGet (funcao (requisicao resposta) { + resposta lmht () }) \ No newline at end of file diff --git a/testes/infraestrutura/roteador.test.ts b/testes/infraestrutura/roteador.test.ts new file mode 100644 index 0000000..ae35103 --- /dev/null +++ b/testes/infraestrutura/roteador.test.ts @@ -0,0 +1,106 @@ +import { Roteador } from '../../infraestrutura/roteador'; + +jest.mock('express', () => { + return () => ({ + use: jest.fn(), + get: jest.fn(), + post: jest.fn(), + put: jest.fn(), + patch: jest.fn(), + delete: jest.fn(), + options: jest.fn(), + copy: jest.fn(), + head: jest.fn(), + lock: jest.fn(), + unlock: jest.fn(), + purge: jest.fn(), + propfind: jest.fn(), + listen: jest.fn(), + static: jest.fn() + }); + }); + +describe('Testes do roteador', () => { + let roteador: Roteador; + + beforeEach(() => { + roteador = new Roteador(); + }); + + it('Deve criar um roteador', () => { + expect(roteador).toBeTruthy(); + }); + + it('deve chamar o método iniciar', () => { + roteador.iniciar(); + expect(roteador.aplicacao.listen).toHaveBeenCalled(); + }) + + it('deve chamar o método post para adicionandoRotaToken', () => { + roteador.adicionandoRotaToken(); + expect(roteador.aplicacao.post).toHaveBeenCalled(); + }) + + it('deve chamar o método ativarMiddleware cors', () => { + roteador.ativarMiddleware('cors', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.cors).toBeTruthy() + }) + + it('deve chamar o método ativarMiddleware helmet', () => { + roteador.ativarMiddleware('helmet', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.helmet).toBeTruthy() + }) + + it('deve chamar o método ativarMiddleware morgan', () => { + roteador.ativarMiddleware('morgan', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.morgan).toBeTruthy() + }) + + it('deve chamar o método ativarMiddleware expressJson', () => { + roteador.ativarMiddleware('json', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.expressJson).toBeTruthy() + }) + + it('deve chamar o método ativarMiddleware bodyParser', () => { + roteador.ativarMiddleware('bodyParser', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.bodyParser).toBeTruthy() + }) + + it('deve chamar o método ativarMiddleware cookieParser', () => { + roteador.ativarMiddleware('cookieParser', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.cookieParser).toBeTruthy() + }) + + it('deve chamar o método ativarMiddleware passport', () => { + roteador.ativarMiddleware('passport', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.passport).toBeTruthy() + }) +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 6c4550d..a0c37b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -304,21 +304,21 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@designliquido/delegua-node@^0.26.2": - version "0.26.2" - resolved "https://registry.yarnpkg.com/@designliquido/delegua-node/-/delegua-node-0.26.2.tgz#53041caa02d6c2f6e4c338b5fab44341c569ec9d" - integrity sha512-p0o7F/rwkU2/NCpfrlvy/YjH+OwuvDmbchMgKqYG4+vbNqygN2MQOO0G8y9hdfBmzS7bgghlHcDpqowZ9FqJhQ== +"@designliquido/delegua-node@^0.26.3": + version "0.26.3" + resolved "https://registry.yarnpkg.com/@designliquido/delegua-node/-/delegua-node-0.26.3.tgz#14e25976883469bdb9fc3478e328bf2a1cdef667" + integrity sha512-SHZHru0MYJClzOIgIwQaBxdXpeySIojzWy8ZdzzLc8djHpeog01Su9APHjxnPj88WTKT1GbqrXZ/5CXF6iy3/w== dependencies: - "@designliquido/delegua" "0.26.2" + "@designliquido/delegua" "0.26.3" chalk "4.1.2" commander "^9.4.1" json-colorizer "^2.2.2" lodash.clonedeep "^4.5.0" -"@designliquido/delegua@0.26.2": - version "0.26.2" - resolved "https://registry.yarnpkg.com/@designliquido/delegua/-/delegua-0.26.2.tgz#bdf30f23cf8bac9788d9eac8a64365ec18e0db44" - integrity sha512-TwRu8UOd1UaBEb3J0j64uPEDNGDAKV/OsrQXN42g32y9Mv2Sv8CiOgD5LABYhjPCKbOhPp9p2du3IMmogkZvYQ== +"@designliquido/delegua@0.26.3": + version "0.26.3" + resolved "https://registry.yarnpkg.com/@designliquido/delegua/-/delegua-0.26.3.tgz#0ea565c5098a9545098f65792a5a904baab0ef80" + integrity sha512-SE+Gzg/dEZXbzL5y1M2gNDHeEnXZ6SUsVoUF2/dK6BzJovLfWskQXVfRfFvhOT8HCvRL03UknFWLw9QBvA35bg== dependencies: antlr4ts "^0.5.0-alpha.4" browser-process-hrtime "^1.0.0" From 6fa63e4ce9438869194e3ac693d9be39cae61e38 Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Wed, 8 Nov 2023 09:44:12 -0300 Subject: [PATCH 08/11] Adicionando testes para roteadores --- infraestrutura/roteador/index.ts | 358 ++++++++++++------------- testes/infraestrutura/roteador.test.ts | 290 +++++++++++++------- 2 files changed, 373 insertions(+), 275 deletions(-) diff --git a/infraestrutura/roteador/index.ts b/infraestrutura/roteador/index.ts index 9abcf17..a35e1c1 100644 --- a/infraestrutura/roteador/index.ts +++ b/infraestrutura/roteador/index.ts @@ -14,214 +14,212 @@ import autenticacao from '../utilidades/autenticacao'; import { devolverVariavelAmbiente } from '../utilidades/variaveis-ambiente'; export class Roteador { - aplicacao: express.Express; - porta: number; + aplicacao: express.Express; + porta: number; - morgan = false; - helmet = false; - expressJson = false; - cookieParser = false; - bodyParser = false; + morgan = false; + helmet = false; + expressJson = false; + cookieParser = false; + bodyParser = false; - cors = false; - passport = false; + cors = false; + passport = false; - constructor() { - this.aplicacao = express(); - this.porta = Number(process.env.PORTA) || Number(process.env.PORT) || 3000; - } - - configurarArquivosEstaticos(diretorio: string = 'publico'): void { - this.aplicacao.use(express.static(diretorio, { redirect: true })); - } - - ativarMiddleware(nomePropriedade: string, informacoesVariavel: VariavelInterface) { - switch (nomePropriedade) { - case 'cors': - this.ativarDesativarCors(informacoesVariavel.valor); - break; - case 'cookieParser': - this.ativarDesativarCookieParser(informacoesVariavel.valor); - break; - case 'bodyParser': - this.ativarDesativarBodyParser(informacoesVariavel.valor); - break; - case 'json': - this.ativarDesativarExpressJson(informacoesVariavel.valor); - break; - case 'passport': - this.ativarDesativarPassport(informacoesVariavel.valor); - break; - case 'morgan': - this.ativarDesativarMorgan(informacoesVariavel.valor); - break; - case 'helmet': - this.ativarDesativarHelmet(informacoesVariavel.valor); - break; - case 'diretorioEstatico': - this.configurarArquivosEstaticos(informacoesVariavel.valor); - break; - default: - console.log(`Método ${nomePropriedade} não reconhecido.`); - break; - } - } - - iniciarMiddlewares() { - if (this.morgan) { - this.aplicacao.use(morgan('dev')); - } - - if (this.helmet) { - this.aplicacao.use(helmet()); - } - - if (this.bodyParser) { - this.aplicacao.use(bodyParser.json()); - } - - if (this.expressJson) { - this.aplicacao.use(express.json()); - } - - if (this.cookieParser) { - this.aplicacao.use(cookieParser()); - } - - if (this.cors) { - this.aplicacao.use(cors()); - } - - if (this.passport) { - this.aplicacao.use(autenticacao().initialize()); - } - } - - ativarDesativarCors(valor: boolean): void { - this.cors = valor; - } + constructor() { + this.aplicacao = express(); + this.porta = Number(process.env.PORTA) || Number(process.env.PORT) || 3000; + } - ativarDesativarPassport(valor: boolean): void { - this.passport = valor; - } + configurarArquivosEstaticos(diretorio: string = 'publico'): void { + this.aplicacao.use(express.static(diretorio, { redirect: true })); + } - ativarDesativarCookieParser(valor: boolean): void { - this.cookieParser = valor; + ativarMiddleware(nomePropriedade: string, informacoesVariavel: VariavelInterface) { + switch (nomePropriedade) { + case 'cors': + this.ativarDesativarCors(informacoesVariavel.valor); + break; + case 'cookieParser': + this.ativarDesativarCookieParser(informacoesVariavel.valor); + break; + case 'bodyParser': + this.ativarDesativarBodyParser(informacoesVariavel.valor); + break; + case 'json': + this.ativarDesativarExpressJson(informacoesVariavel.valor); + break; + case 'passport': + this.ativarDesativarPassport(informacoesVariavel.valor); + break; + case 'morgan': + this.ativarDesativarMorgan(informacoesVariavel.valor); + break; + case 'helmet': + this.ativarDesativarHelmet(informacoesVariavel.valor); + break; + case 'diretorioEstatico': + this.configurarArquivosEstaticos(informacoesVariavel.valor); + break; + default: + console.log(`Método ${nomePropriedade} não reconhecido.`); + break; } + } - ativarDesativarExpressJson(valor: boolean): void { - this.expressJson = valor; + iniciarMiddlewares() { + if (this.morgan) { + this.aplicacao.use(morgan('dev')); } - ativarDesativarBodyParser(valor: boolean): void { - this.bodyParser = valor; + if (this.helmet) { + this.aplicacao.use(helmet()); } - ativarDesativarHelmet(valor: boolean): void { - this.helmet = valor; - } + if (this.bodyParser) { + this.aplicacao.use(bodyParser.json()); + } + + if (this.expressJson) { + this.aplicacao.use(express.json()); + } + + if (this.cookieParser) { + this.aplicacao.use(cookieParser()); + } + + if (this.cors) { + this.aplicacao.use(cors()); + } + + if (this.passport) { + this.aplicacao.use(autenticacao().initialize()); + } + } + + ativarDesativarCors(valor: boolean): void { + this.cors = valor; + } + + ativarDesativarPassport(valor: boolean): void { + this.passport = valor; + } + + ativarDesativarCookieParser(valor: boolean): void { + this.cookieParser = valor; + } + + ativarDesativarExpressJson(valor: boolean): void { + this.expressJson = valor; + } + + ativarDesativarBodyParser(valor: boolean): void { + this.bodyParser = valor; + } - ativarDesativarMorgan(valor: boolean): void { - this.morgan = valor; - } + ativarDesativarHelmet(valor: boolean): void { + this.helmet = valor; + } - rotaGet(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.get(caminho, execucao); - } + ativarDesativarMorgan(valor: boolean): void { + this.morgan = valor; + } - rotaPost(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.post(caminho, execucao); - } + rotaGet(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.get(caminho, execucao); + } - rotaPut(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.put(caminho, execucao); - } + rotaPost(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.post(caminho, execucao); + } - rotaPatch(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.patch(caminho, execucao); - } + rotaPut(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.put(caminho, execucao); + } - rotaDelete(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.delete(caminho, execucao); - } + rotaPatch(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.patch(caminho, execucao); + } - rotaOptions(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.options(caminho, execucao); - } + rotaDelete(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.delete(caminho, execucao); + } - rotaCopy(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.copy(caminho, execucao); - } + rotaOptions(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.options(caminho, execucao); + } - rotaHead(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.head(caminho, execucao); - } + rotaCopy(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.copy(caminho, execucao); + } - rotaLock(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.lock(caminho, execucao); - } + rotaHead(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.head(caminho, execucao); + } - rotaUnlock(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.unlock(caminho, execucao); - } + rotaLock(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.lock(caminho, execucao); + } - rotaPurge(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.purge(caminho, execucao); - } + rotaUnlock(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.unlock(caminho, execucao); + } - rotaPropfind(caminho: string, execucao: (req: Request, res: Response) => void) { - this.aplicacao.propfind(caminho, execucao); - } + rotaPurge(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.purge(caminho, execucao); + } + rotaPropfind(caminho: string, execucao: (req: Request, res: Response) => void) { + this.aplicacao.propfind(caminho, execucao); + } - adicionandoRotaToken() { - this.aplicacao.post("/token", (req: Request, res: Response) => { - if (req.body.email && req.body.senha) { - const { email, senha } = req.body; - const usuario = users.find((u) => { - return u.email === email && u.senha === senha; - }) - if (usuario) { - const payload = { - id: usuario.id - } - const token = jwt.encode(payload, devolverVariavelAmbiente('chaveSecreta') as string); - users.find((u) => u.id === usuario.id).token = token; - return res.json({ token }) - } else { - res.sendStatus(401); - } - } else { - res.sendStatus(401); - } + adicionandoRotaToken() { + this.aplicacao.post('/token', (req: Request, res: Response) => { + if (req.body.email && req.body.senha) { + const { email, senha } = req.body; + const usuario = users.find((u) => { + return u.email === email && u.senha === senha; }); - } - - validarToken(req: Request, res: Response, next: NextFunction) { - const token = req.headers["authorization"]; - if (token) { - try { - const decoded = jwt.decode(token, devolverVariavelAmbiente('chaveSecreta') as string); - if (decoded) { - next(); - } else { - res.sendStatus(401); - } - } catch (error) { - res.sendStatus(401); - } + if (usuario) { + const payload = { + id: usuario.id + }; + const token = jwt.encode(payload, devolverVariavelAmbiente('chaveSecreta') as string); + users.find((u) => u.id === usuario.id).token = token; + return res.json({ token }); } else { - res.sendStatus(401); + res.sendStatus(401); } - } - - - iniciar() { - if (this.passport === true) { - this.adicionandoRotaToken(); + } else { + res.sendStatus(401); + } + }); + } + + validarToken(req: Request, res: Response, next: NextFunction) { + const token = req.headers['authorization']; + if (token) { + try { + const decoded = jwt.decode(token, devolverVariavelAmbiente('chaveSecreta') as string); + if (decoded) { + next(); + } else { + res.sendStatus(401); } - this.aplicacao.listen(this.porta, () => { - console.log(`Aplicação iniciada na porta ${this.porta}`); - }); - } + } catch (error) { + res.sendStatus(401); + } + } else { + res.sendStatus(401); + } + } + + iniciar() { + if (this.passport === true) { + this.adicionandoRotaToken(); + } + this.aplicacao.listen(this.porta, () => { + console.log(`Aplicação iniciada na porta ${this.porta}`); + }); + } } diff --git a/testes/infraestrutura/roteador.test.ts b/testes/infraestrutura/roteador.test.ts index ae35103..a9971a0 100644 --- a/testes/infraestrutura/roteador.test.ts +++ b/testes/infraestrutura/roteador.test.ts @@ -1,106 +1,206 @@ import { Roteador } from '../../infraestrutura/roteador'; jest.mock('express', () => { - return () => ({ - use: jest.fn(), - get: jest.fn(), - post: jest.fn(), - put: jest.fn(), - patch: jest.fn(), - delete: jest.fn(), - options: jest.fn(), - copy: jest.fn(), - head: jest.fn(), - lock: jest.fn(), - unlock: jest.fn(), - purge: jest.fn(), - propfind: jest.fn(), - listen: jest.fn(), - static: jest.fn() - }); + return () => ({ + use: jest.fn(), + get: jest.fn(), + post: jest.fn(), + put: jest.fn(), + patch: jest.fn(), + delete: jest.fn(), + options: jest.fn(), + copy: jest.fn(), + head: jest.fn(), + lock: jest.fn(), + unlock: jest.fn(), + purge: jest.fn(), + propfind: jest.fn(), + listen: jest.fn(), + static: jest.fn() }); +}); describe('Testes do roteador', () => { - let roteador: Roteador; + let roteador: Roteador; + + beforeEach(() => { + roteador = new Roteador(); + }); + + it('Deve criar um roteador', () => { + expect(roteador).toBeTruthy(); + }); + + it('deve chamar o método iniciar', () => { + roteador.iniciar(); + expect(roteador.aplicacao.listen).toHaveBeenCalled(); + }); + + it('deve chamar o método post para adicionandoRotaToken', () => { + roteador.adicionandoRotaToken(); + expect(roteador.aplicacao.post).toHaveBeenCalled(); + }); + + it('deve chamar o método ativarMiddleware cors', () => { + roteador.ativarMiddleware('cors', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.cors).toBeTruthy(); + }); + + it('deve chamar o método ativarMiddleware helmet', () => { + roteador.ativarMiddleware('helmet', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.helmet).toBeTruthy(); + }); - beforeEach(() => { - roteador = new Roteador(); + it('deve chamar o método ativarMiddleware morgan', () => { + roteador.ativarMiddleware('morgan', { + valor: true, + tipo: 'lógico', + imutavel: true }); + expect(roteador.morgan).toBeTruthy(); + }); + + it('deve chamar o método ativarMiddleware expressJson', () => { + roteador.ativarMiddleware('json', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.expressJson).toBeTruthy(); + }); - it('Deve criar um roteador', () => { - expect(roteador).toBeTruthy(); + it('deve chamar o método ativarMiddleware bodyParser', () => { + roteador.ativarMiddleware('bodyParser', { + valor: true, + tipo: 'lógico', + imutavel: true }); + expect(roteador.bodyParser).toBeTruthy(); + }); + + it('deve chamar o método ativarMiddleware cookieParser', () => { + roteador.ativarMiddleware('cookieParser', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.cookieParser).toBeTruthy(); + }); - it('deve chamar o método iniciar', () => { - roteador.iniciar(); - expect(roteador.aplicacao.listen).toHaveBeenCalled(); - }) - - it('deve chamar o método post para adicionandoRotaToken', () => { - roteador.adicionandoRotaToken(); - expect(roteador.aplicacao.post).toHaveBeenCalled(); - }) - - it('deve chamar o método ativarMiddleware cors', () => { - roteador.ativarMiddleware('cors', { - valor: true, - tipo: 'lógico', - imutavel: true - }); - expect(roteador.cors).toBeTruthy() - }) - - it('deve chamar o método ativarMiddleware helmet', () => { - roteador.ativarMiddleware('helmet', { - valor: true, - tipo: 'lógico', - imutavel: true - }); - expect(roteador.helmet).toBeTruthy() - }) - - it('deve chamar o método ativarMiddleware morgan', () => { - roteador.ativarMiddleware('morgan', { - valor: true, - tipo: 'lógico', - imutavel: true - }); - expect(roteador.morgan).toBeTruthy() - }) - - it('deve chamar o método ativarMiddleware expressJson', () => { - roteador.ativarMiddleware('json', { - valor: true, - tipo: 'lógico', - imutavel: true - }); - expect(roteador.expressJson).toBeTruthy() - }) - - it('deve chamar o método ativarMiddleware bodyParser', () => { - roteador.ativarMiddleware('bodyParser', { - valor: true, - tipo: 'lógico', - imutavel: true - }); - expect(roteador.bodyParser).toBeTruthy() - }) - - it('deve chamar o método ativarMiddleware cookieParser', () => { - roteador.ativarMiddleware('cookieParser', { - valor: true, - tipo: 'lógico', - imutavel: true - }); - expect(roteador.cookieParser).toBeTruthy() - }) - - it('deve chamar o método ativarMiddleware passport', () => { - roteador.ativarMiddleware('passport', { - valor: true, - tipo: 'lógico', - imutavel: true - }); - expect(roteador.passport).toBeTruthy() - }) -}); \ No newline at end of file + it('deve chamar o método ativarMiddleware passport', () => { + roteador.ativarMiddleware('passport', { + valor: true, + tipo: 'lógico', + imutavel: true + }); + expect(roteador.passport).toBeTruthy(); + }); + + //FIXME - TypeError: express_1.default.static is not a function + it.skip('deve char o método ativarMiddleware configurarArquivosEstaticos', () => { + const spy = jest.spyOn(roteador, 'configurarArquivosEstaticos'); + roteador.ativarMiddleware('diretorioEstatico', { + valor: 'teste', + tipo: 'texto', + imutavel: true + }); + expect(spy).toHaveBeenCalled(); + }); + + it('deve chamar default no método ativarMiddleware', () => { + const spy = jest.spyOn(roteador, 'ativarMiddleware'); + roteador.ativarMiddleware('teste', { + valor: 'teste', + tipo: 'texto', + imutavel: true + }); + expect(spy).toHaveBeenCalled(); + }); + + it('deve chamar o metodo iniciarMiddlewares', () => { + const spy = jest.spyOn(roteador, 'iniciarMiddlewares'); + roteador.iniciarMiddlewares(); + expect(spy).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.use no método iniciarMiddlewares', () => { + roteador.morgan = true; + roteador.helmet = true; + roteador.bodyParser = true; + // FIXME - TypeError: express_1.default.json is not a function + // roteador.expressJson = true; + roteador.cookieParser = true; + roteador.cors = true; + roteador.passport = true; + roteador.iniciarMiddlewares(); + expect(roteador.aplicacao.use).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.get no método rotaGet', () => { + roteador.rotaGet('teste', () => null); + expect(roteador.aplicacao.get).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.post no método rotaPost', () => { + roteador.rotaPost('teste', () => null); + expect(roteador.aplicacao.post).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.put no método rotaPut', () => { + roteador.rotaPut('teste', () => null); + expect(roteador.aplicacao.put).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.patch no método rotaPatch', () => { + roteador.rotaPatch('teste', () => null); + expect(roteador.aplicacao.patch).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.delete no método rotaDelete', () => { + roteador.rotaDelete('teste', () => null); + expect(roteador.aplicacao.delete).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.options no método rotaOptions', () => { + roteador.rotaOptions('teste', () => null); + expect(roteador.aplicacao.options).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.copy no método rotaCopy', () => { + roteador.rotaCopy('teste', () => null); + expect(roteador.aplicacao.copy).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.head no método rotaHead', () => { + roteador.rotaHead('teste', () => null); + expect(roteador.aplicacao.head).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.lock no método rotaLock', () => { + roteador.rotaLock('teste', () => null); + expect(roteador.aplicacao.lock).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.unlock no método rotaUnlock', () => { + roteador.rotaUnlock('teste', () => null); + expect(roteador.aplicacao.unlock).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.purge no método rotaPurge', () => { + roteador.rotaPurge('teste', () => null); + expect(roteador.aplicacao.purge).toHaveBeenCalled(); + }); + + it('deve chamar this.aplicacao.propfind no método rotaPropfind', () => { + roteador.rotaPropfind('teste', () => null); + expect(roteador.aplicacao.propfind).toHaveBeenCalled(); + }); +}); From 1c09b46f2b45c83ba245de68f09e3aefc7284d63 Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Wed, 8 Nov 2023 09:48:17 -0300 Subject: [PATCH 09/11] ProvedorLincones testes --- testes/infraestrutura/provedores.test.ts | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 testes/infraestrutura/provedores.test.ts diff --git a/testes/infraestrutura/provedores.test.ts b/testes/infraestrutura/provedores.test.ts new file mode 100644 index 0000000..e6cedfb --- /dev/null +++ b/testes/infraestrutura/provedores.test.ts @@ -0,0 +1,26 @@ +import { ProvedorLincones } from '../../infraestrutura/provedores'; + +describe('Testes do provedor Lincones', () => { + let provedor: ProvedorLincones; + + beforeEach(() => { + provedor = new ProvedorLincones(); + }); + + it('Deve criar um provedor', () => { + expect(provedor).toBeTruthy(); + }); + + it('Deve configurar o provedor', () => { + provedor.configurar('tecnologia', 'sqlite'); + provedor.configurar('caminho', 'banco.db'); + expect(provedor.configurado).toBeTruthy(); + }); + + it('Deve resolver o provedor', async () => { + provedor.configurar('tecnologia', 'sqlite'); + provedor.configurar('caminho', 'banco.db'); + const modulo = await provedor.resolver(); + expect(modulo.componentes['executar']).toBeTruthy(); + }); +}); From 1746dbdeccd93dd8bc24c64f69b74d929c1253a7 Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Wed, 8 Nov 2023 10:27:15 -0300 Subject: [PATCH 10/11] Subindo teste para +45% --- infraestrutura/preprocessadores/foles.ts | 58 +++++++++---------- .../infraestrutura/formatadores.test.ts | 19 ++++++ .../preprocessadores/foles.test.ts | 24 ++++++++ .../preprocessadores/handlebars.test.ts | 19 ++++++ .../infraestrutura/provedores.test.ts | 2 +- .../infraestrutura/roteador.test.ts | 2 +- testes/testes-unitarios/visoes/teste.lmht | 0 7 files changed, 93 insertions(+), 31 deletions(-) create mode 100644 testes/testes-unitarios/infraestrutura/formatadores.test.ts create mode 100644 testes/testes-unitarios/infraestrutura/preprocessadores/foles.test.ts create mode 100644 testes/testes-unitarios/infraestrutura/preprocessadores/handlebars.test.ts rename testes/{ => testes-unitarios}/infraestrutura/provedores.test.ts (90%) rename testes/{ => testes-unitarios}/infraestrutura/roteador.test.ts (98%) create mode 100644 testes/testes-unitarios/visoes/teste.lmht diff --git a/infraestrutura/preprocessadores/foles.ts b/infraestrutura/preprocessadores/foles.ts index e6415e9..01947f2 100644 --- a/infraestrutura/preprocessadores/foles.ts +++ b/infraestrutura/preprocessadores/foles.ts @@ -1,36 +1,36 @@ -import { XMLParser, XMLBuilder } from 'fast-xml-parser'; import { FolEs } from '@designliquido/foles'; +import { XMLBuilder, XMLParser } from 'fast-xml-parser'; export class PreprocessadorFolEs { - leitorLmht: XMLParser; - construtorLmht: XMLBuilder; - foles: FolEs; + leitorLmht: XMLParser; + construtorLmht: XMLBuilder; + foles: FolEs; - constructor() { - this.leitorLmht = new XMLParser({ - ignoreAttributes : false - }); - this.construtorLmht = new XMLBuilder({ - ignoreAttributes : false - }); - this.foles = new FolEs(false); - } - - processar(conteudoLmht: string): string { - const objetoVisao = this.leitorLmht.parse(conteudoLmht); + constructor() { + this.leitorLmht = new XMLParser({ + ignoreAttributes: false + }); + this.construtorLmht = new XMLBuilder({ + ignoreAttributes: false + }); + this.foles = new FolEs(false); + } - const cabeca = objetoVisao.lmht?.cabeca || objetoVisao.lmht?.cabeça; - if (cabeca) { - // Procurar por estrutura de estilo. - const estilo = cabeca.estilo; - if (estilo) { - const estiloConvertido = this.foles.converterTextoParaCss(estilo); - cabeca.style = estiloConvertido; - delete cabeca.estilo; - } - } + processar(conteudoLmht: string): string { + const objetoVisao = this.leitorLmht.parse(conteudoLmht); - const xmlContent = this.construtorLmht.build(objetoVisao); - return xmlContent; + const cabeca = objetoVisao.lmht?.cabeca || objetoVisao.lmht?.cabeça; + if (cabeca) { + // Procurar por estrutura de estilo. + const estilo = cabeca.estilo; + if (estilo) { + const estiloConvertido = this.foles.converterTextoParaCss(estilo); + cabeca.style = estiloConvertido; + delete cabeca.estilo; + } } -} \ No newline at end of file + + const xmlContent = this.construtorLmht.build(objetoVisao); + return xmlContent; + } +} diff --git a/testes/testes-unitarios/infraestrutura/formatadores.test.ts b/testes/testes-unitarios/infraestrutura/formatadores.test.ts new file mode 100644 index 0000000..814f248 --- /dev/null +++ b/testes/testes-unitarios/infraestrutura/formatadores.test.ts @@ -0,0 +1,19 @@ +import { FormatadorLmht } from '../../../infraestrutura/formatadores'; + +describe('Testes do formatador LMHT', () => { + let formatador: FormatadorLmht; + + beforeEach(() => { + formatador = new FormatadorLmht(process.cwd() + '/testes/testes-unitarios'); + }); + + it('Deve criar um formatador', () => { + expect(formatador).toBeTruthy(); + }); + + it('Deve formatar um arquivo', async () => { + const resultado = await formatador.formatar('teste', {}); + const esperado = ``; + expect(resultado).toBe(esperado); + }); +}); diff --git a/testes/testes-unitarios/infraestrutura/preprocessadores/foles.test.ts b/testes/testes-unitarios/infraestrutura/preprocessadores/foles.test.ts new file mode 100644 index 0000000..d5a8b89 --- /dev/null +++ b/testes/testes-unitarios/infraestrutura/preprocessadores/foles.test.ts @@ -0,0 +1,24 @@ +import { PreprocessadorFolEs } from '../../../../infraestrutura/preprocessadores'; + +describe('Testes do preprocessador FolEs', () => { + let preprocessador: PreprocessadorFolEs; + + beforeEach(() => { + preprocessador = new PreprocessadorFolEs(); + }); + + it('Deve criar um preprocessador', () => { + expect(preprocessador).toBeTruthy(); + }); + + it('Deve processar o preprocessador', () => { + const conteudo = 'corpo { tamanho-fonte: 22px; }'; + const resultado = preprocessador.processar(conteudo); + const esperado = ``; + expect(resultado).toBe(esperado); + }); +}); diff --git a/testes/testes-unitarios/infraestrutura/preprocessadores/handlebars.test.ts b/testes/testes-unitarios/infraestrutura/preprocessadores/handlebars.test.ts new file mode 100644 index 0000000..ad35827 --- /dev/null +++ b/testes/testes-unitarios/infraestrutura/preprocessadores/handlebars.test.ts @@ -0,0 +1,19 @@ +import { PreprocessadorHandlebars } from '../../../../infraestrutura/preprocessadores'; + +describe('Testes do preprocessador Handlebars', () => { + let preprocessador: PreprocessadorHandlebars; + + beforeEach(() => { + preprocessador = new PreprocessadorHandlebars(); + }); + + it('Deve criar um preprocessador', () => { + expect(preprocessador).toBeTruthy(); + }); + + it('Deve processar o preprocessador', () => { + const conteudo = '{{#cada}}\n{{/cada}}'; + const resultado = preprocessador.processar(conteudo); + expect(resultado).toEqual('{{#each}}\n{{/each}}'); + }); +}); diff --git a/testes/infraestrutura/provedores.test.ts b/testes/testes-unitarios/infraestrutura/provedores.test.ts similarity index 90% rename from testes/infraestrutura/provedores.test.ts rename to testes/testes-unitarios/infraestrutura/provedores.test.ts index e6cedfb..a56b73e 100644 --- a/testes/infraestrutura/provedores.test.ts +++ b/testes/testes-unitarios/infraestrutura/provedores.test.ts @@ -1,4 +1,4 @@ -import { ProvedorLincones } from '../../infraestrutura/provedores'; +import { ProvedorLincones } from '../../../infraestrutura/provedores'; describe('Testes do provedor Lincones', () => { let provedor: ProvedorLincones; diff --git a/testes/infraestrutura/roteador.test.ts b/testes/testes-unitarios/infraestrutura/roteador.test.ts similarity index 98% rename from testes/infraestrutura/roteador.test.ts rename to testes/testes-unitarios/infraestrutura/roteador.test.ts index a9971a0..b956e06 100644 --- a/testes/infraestrutura/roteador.test.ts +++ b/testes/testes-unitarios/infraestrutura/roteador.test.ts @@ -1,4 +1,4 @@ -import { Roteador } from '../../infraestrutura/roteador'; +import { Roteador } from '../../../infraestrutura/roteador'; jest.mock('express', () => { return () => ({ diff --git a/testes/testes-unitarios/visoes/teste.lmht b/testes/testes-unitarios/visoes/teste.lmht new file mode 100644 index 0000000..e69de29 From d92e8eb8e293ef8fc8fc2eb0952b7e3e5e6011ac Mon Sep 17 00:00:00 2001 From: ItaloCobains Date: Wed, 8 Nov 2023 10:46:25 -0300 Subject: [PATCH 11/11] Corrigindo bug que meu autoformat gerou --- rotas/blog/inicial.delegua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rotas/blog/inicial.delegua b/rotas/blog/inicial.delegua index 241efa9..97da1fb 100644 --- a/rotas/blog/inicial.delegua +++ b/rotas/blog/inicial.delegua @@ -1,3 +1,3 @@ -liquido rotaGet (funcao (requisicao resposta) { - resposta lmht () +liquido.rotaGet(funcao(requisicao, resposta) { + resposta.lmht({ "titulo": "Blog" }) }) \ No newline at end of file