Files
html2pdf/html2pdf_test.go
2026-01-07 17:04:26 +01:00

188 lines
3.7 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.ConvertToPdf(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.ConvertHtmlsToPdf(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")
}
func TestConvertHtmlsToPDFZip(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>
`)
outputPath := filepath.Join("test.pdf")
c, err := converter.NewConverter("assets/chrome-headless-shell/win64")
if err != nil {
t.Fatal(err)
}
defer c.Close()
b, err := c.ConvertHtmlsToZip(models.Html{Html: html, Output: outputPath})
if err != nil {
t.Fatalf("ConvertHtml failed: %v", err)
}
f, err := os.Create("test.zip")
if err != nil {
t.Fatalf("create file: %v", err)
}
defer f.Close()
_, err = f.Write(b)
if err != nil {
t.Fatalf("write to file: %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")
}