otimização de filtroDelta e conversão para bun
This commit is contained in:
parent
e80e1be4c0
commit
230f2f62db
15 changed files with 409 additions and 1944 deletions
|
|
@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.iniciarFiltroDelta = exports.criarFiltroDelta = exports.zFiltroDelta = exports.zCondicaoFiltroDelta = exports.zColunaFiltroDelta = exports.operadorFiltroDeltaDetalhes = exports.zOperadorFiltroDelta = void 0;
|
||||
exports.iniciarFiltroDelta = exports.criarFiltroDelta = exports.zFiltroDelta = exports.zCondicaoFiltroDelta = exports.zColunaFiltroDelta = exports.regexColunaFiltroDelta = exports.operadorFiltroDeltaDetalhes = exports.zOperadorFiltroDelta = void 0;
|
||||
const zod_1 = __importDefault(require("zod"));
|
||||
/**
|
||||
* =============================================================================
|
||||
|
|
@ -94,14 +94,15 @@ exports.operadorFiltroDeltaDetalhes = {
|
|||
const regexIdCondicaoFiltroDelta = /^\{[\w:]+\}$/;
|
||||
/**
|
||||
* Valida nomes de colunas e caminhos jsonb.
|
||||
* Permite letras, números, sublinhado (_), ponto (.) e hífen (-) em qualquer combinação.
|
||||
*/
|
||||
const regexColunaFiltroDelta = /^\w+(\.\w+)*$/;
|
||||
exports.regexColunaFiltroDelta = /^[\w.-]+$/;
|
||||
/**
|
||||
* Coluna simples ou caminho aninhado de jsonb.
|
||||
*/
|
||||
exports.zColunaFiltroDelta = zod_1.default
|
||||
.string()
|
||||
.regex(regexColunaFiltroDelta, "Coluna inválida")
|
||||
.regex(exports.regexColunaFiltroDelta, "Coluna inválida")
|
||||
.describe("nome da coluna ou caminho aninhado do jsonb");
|
||||
/**
|
||||
* Estrutura individual de uma condição do filtro.
|
||||
|
|
|
|||
|
|
@ -1,23 +1,23 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const vitest_1 = require("vitest");
|
||||
const bun_test_1 = require("bun:test");
|
||||
const tipagemRotas_1 = require("../tipagemRotas");
|
||||
(0, vitest_1.describe)("TipagemRotas", () => {
|
||||
(0, vitest_1.it)("deve montar _partesCaminho a partir de string ou array, normalizando barras", () => {
|
||||
(0, bun_test_1.describe)("TipagemRotas", () => {
|
||||
(0, bun_test_1.it)("deve montar _partesCaminho a partir de string ou array, normalizando barras", () => {
|
||||
const r1 = new tipagemRotas_1.TipagemRotas({ caminho: "aplicacao/func" });
|
||||
(0, vitest_1.expect)(r1.caminho).toBe("/aplicacao/func");
|
||||
(0, bun_test_1.expect)(r1.caminho).toBe("/aplicacao/func");
|
||||
const r2 = new tipagemRotas_1.TipagemRotas({
|
||||
caminho: ["aplicacao", "func"],
|
||||
});
|
||||
(0, vitest_1.expect)(r2.caminho).toBe("/aplicacao/func");
|
||||
(0, bun_test_1.expect)(r2.caminho).toBe("/aplicacao/func");
|
||||
const r3 = new tipagemRotas_1.TipagemRotas({ caminho: "/a//b///c/" });
|
||||
(0, vitest_1.expect)(r3.caminho).toBe("/a/b/c");
|
||||
(0, bun_test_1.expect)(r3.caminho).toBe("/a/b/c");
|
||||
});
|
||||
(0, vitest_1.it)("Valores de entrada com mesmo valor dos valores de saída", () => {
|
||||
(0, bun_test_1.it)("Valores de entrada com mesmo valor dos valores de saída", () => {
|
||||
const r1 = new tipagemRotas_1.TipagemRotas({ caminho: "aplicacao/func" });
|
||||
const objetoEntrada = { idade: 21, nome: "João" };
|
||||
const rota = r1.endereco(objetoEntrada);
|
||||
const parametros = r1.parametros(rota);
|
||||
(0, vitest_1.expect)(parametros.nome).toBe(objetoEntrada.nome);
|
||||
(0, bun_test_1.expect)(parametros.nome).toBe(objetoEntrada.nome);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
111
dist-back/testes/filtroDelta.test.js
Normal file
111
dist-back/testes/filtroDelta.test.js
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const bun_test_1 = require("bun:test");
|
||||
const filtroDelta_1 = require("../filtroDelta");
|
||||
(0, bun_test_1.describe)("filtroDelta - validação de colunas", () => {
|
||||
(0, bun_test_1.it)("deve validar nomes de colunas e propriedades contendo qualquer combinação de \\w, . e -", () => {
|
||||
const colunasValidasCombinadas = [
|
||||
"coluna-teste",
|
||||
"dados.item-1",
|
||||
"minha-tabela.meu-campo",
|
||||
"uuid-550e8400-e29b-41d4-a716-446655440000",
|
||||
"objeto-a.propriedade-b.campo_c",
|
||||
"campo-1",
|
||||
"parametro-a-b-c",
|
||||
"coluna.",
|
||||
".coluna",
|
||||
"coluna..sub",
|
||||
"a-b.c-d.e",
|
||||
"-coluna-",
|
||||
"..",
|
||||
".",
|
||||
"-",
|
||||
"---",
|
||||
"dados.item_1-x.teste.",
|
||||
"prefixo..meio--fim",
|
||||
];
|
||||
for (const coluna of colunasValidasCombinadas) {
|
||||
(0, bun_test_1.expect)(filtroDelta_1.regexColunaFiltroDelta.test(coluna)).toBe(true);
|
||||
(0, bun_test_1.expect)(filtroDelta_1.zColunaFiltroDelta.parse(coluna)).toBe(coluna);
|
||||
}
|
||||
});
|
||||
(0, bun_test_1.it)("deve validar nomes de colunas convencionais com letras, números e sublinhados", () => {
|
||||
const colunasConvencionais = [
|
||||
"nome",
|
||||
"idade",
|
||||
"usuario_id",
|
||||
"_id",
|
||||
"dados.propriedade",
|
||||
"tabela.campo_123.sub_valor",
|
||||
];
|
||||
for (const coluna of colunasConvencionais) {
|
||||
(0, bun_test_1.expect)(filtroDelta_1.regexColunaFiltroDelta.test(coluna)).toBe(true);
|
||||
(0, bun_test_1.expect)(filtroDelta_1.zColunaFiltroDelta.parse(coluna)).toBe(coluna);
|
||||
}
|
||||
});
|
||||
(0, bun_test_1.it)("deve rejeitar nomes de colunas inválidos", () => {
|
||||
const colunasInvalidas = [
|
||||
"",
|
||||
"coluna com espaco",
|
||||
"coluna;drop",
|
||||
"coluna/sub",
|
||||
"coluna@dominio",
|
||||
"coluna#1",
|
||||
"coluna$valor",
|
||||
"coluna'teste'",
|
||||
'coluna"teste"',
|
||||
"(coluna)",
|
||||
"coluna=1",
|
||||
"coluna\nteste",
|
||||
];
|
||||
for (const coluna of colunasInvalidas) {
|
||||
(0, bun_test_1.expect)(filtroDelta_1.regexColunaFiltroDelta.test(coluna)).toBe(false);
|
||||
(0, bun_test_1.expect)(() => filtroDelta_1.zColunaFiltroDelta.parse(coluna)).toThrow("Coluna inválida");
|
||||
}
|
||||
});
|
||||
(0, bun_test_1.it)("deve permitir criar filtro delta completo com colunas contendo hífen", () => {
|
||||
const filtro = {
|
||||
condicoes: [
|
||||
{
|
||||
id: "{c1}",
|
||||
coluna: "dados-usuario.primeiro-nome",
|
||||
operador: "=",
|
||||
valor: "Luiz",
|
||||
},
|
||||
{
|
||||
id: "{c2}",
|
||||
coluna: "configuracao-sistema.status-ativo",
|
||||
operador: "=",
|
||||
valor: true,
|
||||
},
|
||||
],
|
||||
formula: "{c1} E {c2}",
|
||||
};
|
||||
const resultado = filtroDelta_1.zFiltroDelta.parse(filtro);
|
||||
(0, bun_test_1.expect)(resultado.condicoes).toHaveLength(2);
|
||||
(0, bun_test_1.expect)(resultado.condicoes[0].coluna).toBe("dados-usuario.primeiro-nome");
|
||||
(0, bun_test_1.expect)(resultado.condicoes[1].coluna).toBe("configuracao-sistema.status-ativo");
|
||||
});
|
||||
(0, bun_test_1.it)("deve funcionar com a fábrica iniciarFiltroDelta usando tipos de colunas com hífen", () => {
|
||||
const { criarFiltroDelta } = (0, filtroDelta_1.iniciarFiltroDelta)();
|
||||
const filtro = criarFiltroDelta({
|
||||
condicoes: [
|
||||
{
|
||||
id: "{1}",
|
||||
coluna: "item-id",
|
||||
operador: "!=",
|
||||
valor: "abc",
|
||||
},
|
||||
{
|
||||
id: "{2}",
|
||||
coluna: "parametros.taxa-padrao",
|
||||
operador: ">=",
|
||||
valor: 10,
|
||||
},
|
||||
],
|
||||
formula: "{1} OU {2}",
|
||||
});
|
||||
(0, bun_test_1.expect)(filtro.condicoes[0].coluna).toBe("item-id");
|
||||
(0, bun_test_1.expect)(filtro.condicoes[1].coluna).toBe("parametros.taxa-padrao");
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue