feat(documents): suporte a linha condicional (conditional) + catálogo completo
Necessário pra importar os 7 templates reais do legado (fornecidos pelo usuário via export do OrçaFácil): o Termo de Contratação STFC usa o nó `conditional` (envelope em volta de uma tableRow, franquia de minutos/0800) — sem suporte, tanto o backend quanto o editor Tiptap rejeitavam/renderizavam em branco esse documento específico, mesmo bug já documentado no export do legado. A condição em si nunca é avaliada nesta leva (fora de escopo) — a linha sempre passa adiante, comportamento explícito e documentado. Também adiciona ao variable-catalog.ts as ~25 variáveis que faltavam (tarifação STFC por banda, 0800, portabilidade, prazo de instalação), descobertas comparando contra as chaves reais usadas nos 7 templates importados. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -116,6 +116,56 @@ describe("editor-content-renderer", () => {
|
||||
expect(resolvedHtml).not.toContain("merge-field-chip");
|
||||
});
|
||||
|
||||
it("conditional sempre renderiza sua linha (avaliação real de condição é trabalho futuro)", () => {
|
||||
const doc = {
|
||||
type: "doc",
|
||||
content: [
|
||||
{
|
||||
type: "table",
|
||||
content: [
|
||||
{
|
||||
type: "tableRow",
|
||||
content: [{ type: "tableHeader", content: [{ type: "paragraph", content: [{ type: "text", text: "Coluna" }] }] }],
|
||||
},
|
||||
{
|
||||
type: "conditional",
|
||||
attrs: { field: "oferta.franquia_minutos", operator: "exists" },
|
||||
content: [
|
||||
{
|
||||
type: "tableRow",
|
||||
content: [
|
||||
{ type: "tableCell", content: [{ type: "paragraph", content: [{ type: "text", text: "linha condicional" }] }] },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const html = renderToHtml(doc);
|
||||
expect(html).toMatch(/<thead>.*<th><p>Coluna<\/p><\/th>.*<\/thead>/s);
|
||||
expect(html).toContain("<tr><td><p>linha condicional</p></td></tr>");
|
||||
expect(html).not.toContain("conditional");
|
||||
});
|
||||
|
||||
it("collectMergeFieldKeys enxerga chaves dentro de um conditional", () => {
|
||||
const doc = {
|
||||
type: "doc",
|
||||
content: [
|
||||
{
|
||||
type: "conditional",
|
||||
attrs: { field: "x" },
|
||||
content: [
|
||||
{ type: "tableRow", content: [{ type: "tableCell", content: [{ type: "mergeField", attrs: { key: "a.b" } }] }] },
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
expect(collectMergeFieldKeys(doc)).toEqual(["a.b"]);
|
||||
});
|
||||
|
||||
it("escapa HTML de texto e de valores resolvidos (proteção contra XSS)", () => {
|
||||
const doc = {
|
||||
type: "doc",
|
||||
|
||||
Reference in New Issue
Block a user