package renderizacao

import (
	"os"
	"path/filepath"
	"strings"
	"testing"
)

func TestMotorPreservaCDATA(t *testing.T) {
	dir := t.TempDir()
	portais := filepath.Join(dir, "portais")
	if err := os.MkdirAll(portais, 0o755); err != nil {
		t.Fatal(err)
	}
	tpl := `<?xml version="1.0" encoding="UTF-8"?>
<Carga>
  <Bairro><![CDATA[{{raw (index . "bairro")}}]]></Bairro>
  <Titulo>{{index .Header "nome"}}</Titulo>
</Carga>`
	if err := os.WriteFile(filepath.Join(portais, "teste.xml.tmpl"), []byte(tpl), 0o644); err != nil {
		t.Fatal(err)
	}

	motor := NovoMotor(dir)
	out, err := motor.Renderizar("teste", map[string]any{
		"Header": map[string]string{"nome": "São José"},
		"bairro": "Centro",
	})
	if err != nil {
		t.Fatal(err)
	}
	s := string(out)
	if strings.Contains(s, "&lt;") {
		t.Fatalf("XML não deve conter entidades HTML: %s", s)
	}
	if !strings.Contains(s, "<![CDATA[Centro]]>") {
		t.Fatalf("CDATA esperado intacto: %s", s)
	}
	if !strings.Contains(s, "São José") {
		t.Fatalf("acentos preservados: %s", s)
	}
}
