120 lines
2.3 KiB
Go
120 lines
2.3 KiB
Go
package html2pdf
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.tecamino.com/paadi/html2pdf/converter"
|
|
"gitea.tecamino.com/paadi/html2pdf/models"
|
|
)
|
|
|
|
func TestConvert(t *testing.T) {
|
|
t.Log("start test convert one file")
|
|
|
|
err := Convert("./assets", "dst/test.html", "out.pdf")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestConvertFiles(t *testing.T) {
|
|
t.Log("start test convert files")
|
|
|
|
rootPath := "dst"
|
|
files, err := os.ReadDir(rootPath)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var input []models.File
|
|
for _, f := range files {
|
|
ext := filepath.Ext(f.Name())
|
|
if ext != ".html" {
|
|
continue
|
|
}
|
|
|
|
input = append(input, models.File{
|
|
Input: filepath.Join(rootPath, f.Name()),
|
|
Output: strings.Replace(f.Name(), ext, ".pdf", 1),
|
|
})
|
|
}
|
|
|
|
c, err := converter.NewConverter("assets/chrome-headless-shell/win64")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer c.Close()
|
|
|
|
c.SetProgressCallback(func(progress int) {
|
|
fmt.Println(progress)
|
|
})
|
|
|
|
if err := c.Convert(input...); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log("test successfull")
|
|
}
|
|
|
|
func TestConvertHtml(t *testing.T) {
|
|
t.Log("start test ConvertHtml")
|
|
|
|
// Skip in short mode (useful for CI)
|
|
if testing.Short() {
|
|
t.Skip("skipping ConvertHtml integration test in short mode")
|
|
}
|
|
|
|
html := []byte(`
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Test PDF</title>
|
|
<style>
|
|
body { font-family: Arial, sans-serif; }
|
|
h1 { color: #333; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>Hello PDF</h1>
|
|
<p>This is a test.</p>
|
|
</body>
|
|
</html>
|
|
`)
|
|
|
|
tmpDir := t.TempDir()
|
|
outputPath := filepath.Join(tmpDir, "test.pdf")
|
|
|
|
c, err := converter.NewConverter("assets/chrome-headless-shell/win64")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer c.Close()
|
|
|
|
err = c.ConvertHtmls(models.Html{Html: html, Output: outputPath})
|
|
if err != nil {
|
|
t.Fatalf("ConvertHtml failed: %v", err)
|
|
}
|
|
|
|
// Assert PDF exists
|
|
data, err := os.ReadFile(outputPath)
|
|
if err != nil {
|
|
t.Fatalf("PDF not created: %v", err)
|
|
}
|
|
|
|
// Assert non-empty
|
|
if len(data) == 0 {
|
|
t.Fatal("PDF file is empty")
|
|
}
|
|
|
|
// Assert valid PDF header
|
|
if !bytes.HasPrefix(data, []byte("%PDF-")) {
|
|
t.Fatalf("output is not a valid PDF (missing %%PDF- header)")
|
|
}
|
|
|
|
t.Log("ConvertHtml test successful")
|
|
}
|