109 lines
3.9 KiB
JavaScript
109 lines
3.9 KiB
JavaScript
import { describe, expect, it } from "bun:test";
|
|
import { iniciarFiltroDelta, regexColunaFiltroDelta, zColunaFiltroDelta, zFiltroDelta, } from "../filtroDelta";
|
|
describe("filtroDelta - validação de colunas", () => {
|
|
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) {
|
|
expect(regexColunaFiltroDelta.test(coluna)).toBe(true);
|
|
expect(zColunaFiltroDelta.parse(coluna)).toBe(coluna);
|
|
}
|
|
});
|
|
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) {
|
|
expect(regexColunaFiltroDelta.test(coluna)).toBe(true);
|
|
expect(zColunaFiltroDelta.parse(coluna)).toBe(coluna);
|
|
}
|
|
});
|
|
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) {
|
|
expect(regexColunaFiltroDelta.test(coluna)).toBe(false);
|
|
expect(() => zColunaFiltroDelta.parse(coluna)).toThrow("Coluna inválida");
|
|
}
|
|
});
|
|
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 = zFiltroDelta.parse(filtro);
|
|
expect(resultado.condicoes).toHaveLength(2);
|
|
expect(resultado.condicoes[0].coluna).toBe("dados-usuario.primeiro-nome");
|
|
expect(resultado.condicoes[1].coluna).toBe("configuracao-sistema.status-ativo");
|
|
});
|
|
it("deve funcionar com a fábrica iniciarFiltroDelta usando tipos de colunas com hífen", () => {
|
|
const { criarFiltroDelta } = 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}",
|
|
});
|
|
expect(filtro.condicoes[0].coluna).toBe("item-id");
|
|
expect(filtro.condicoes[1].coluna).toBe("parametros.taxa-padrao");
|
|
});
|
|
});
|