106 lines
3.3 KiB
Go
106 lines
3.3 KiB
Go
|
|
package pdfrender
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestInitializeTemplates(t *testing.T) {
|
||
|
|
// Setup test directories
|
||
|
|
tmpDir := t.TempDir()
|
||
|
|
defaultDir := filepath.Join(tmpDir, "default_templates")
|
||
|
|
targetDir := filepath.Join(tmpDir, "templates")
|
||
|
|
|
||
|
|
// Create default templates directory with test files
|
||
|
|
if err := os.MkdirAll(filepath.Join(defaultDir, "TestTemplate"), 0755); err != nil {
|
||
|
|
t.Fatalf("Failed to create default template dir: %v", err)
|
||
|
|
}
|
||
|
|
testFile := filepath.Join(defaultDir, "TestTemplate", "page1.html")
|
||
|
|
if err := os.WriteFile(testFile, []byte("test content"), 0644); err != nil {
|
||
|
|
t.Fatalf("Failed to create test file: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Test 1: Copy when target directory doesn't exist
|
||
|
|
if err := InitializeTemplates(defaultDir, targetDir); err != nil {
|
||
|
|
t.Errorf("InitializeTemplates failed: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Verify file was copied
|
||
|
|
copiedFile := filepath.Join(targetDir, "TestTemplate", "page1.html")
|
||
|
|
if _, err := os.Stat(copiedFile); os.IsNotExist(err) {
|
||
|
|
t.Error("Expected file was not copied")
|
||
|
|
}
|
||
|
|
|
||
|
|
content, err := os.ReadFile(copiedFile)
|
||
|
|
if err != nil || string(content) != "test content" {
|
||
|
|
t.Error("Copied file content doesn't match")
|
||
|
|
}
|
||
|
|
|
||
|
|
// Test 2: Don't overwrite when content is identical
|
||
|
|
if err := InitializeTemplates(defaultDir, targetDir); err != nil {
|
||
|
|
t.Errorf("InitializeTemplates failed on second run: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Verify file still has same content
|
||
|
|
content, err = os.ReadFile(copiedFile)
|
||
|
|
if err != nil || string(content) != "test content" {
|
||
|
|
t.Error("File content should remain unchanged")
|
||
|
|
}
|
||
|
|
|
||
|
|
// Test 3: Update when default template changed
|
||
|
|
updatedContent := []byte("updated test content")
|
||
|
|
if err := os.WriteFile(testFile, updatedContent, 0644); err != nil {
|
||
|
|
t.Fatalf("Failed to update source file: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := InitializeTemplates(defaultDir, targetDir); err != nil {
|
||
|
|
t.Errorf("InitializeTemplates failed after source update: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Verify file was updated
|
||
|
|
content, err = os.ReadFile(copiedFile)
|
||
|
|
if err != nil || string(content) != "updated test content" {
|
||
|
|
t.Error("File should have been updated with new content")
|
||
|
|
}
|
||
|
|
|
||
|
|
// Test 4: Handle missing default directory gracefully
|
||
|
|
if err := InitializeTemplates("/nonexistent", targetDir); err == nil {
|
||
|
|
t.Error("Expected error for nonexistent default directory")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestInitializeTemplatesWithMultipleFiles(t *testing.T) {
|
||
|
|
tmpDir := t.TempDir()
|
||
|
|
defaultDir := filepath.Join(tmpDir, "default_templates")
|
||
|
|
targetDir := filepath.Join(tmpDir, "templates")
|
||
|
|
|
||
|
|
// Create multiple templates and files
|
||
|
|
templates := []string{"Template1", "Template2"}
|
||
|
|
for _, tmpl := range templates {
|
||
|
|
tmplDir := filepath.Join(defaultDir, tmpl)
|
||
|
|
if err := os.MkdirAll(tmplDir, 0755); err != nil {
|
||
|
|
t.Fatalf("Failed to create template dir: %v", err)
|
||
|
|
}
|
||
|
|
for i := 1; i <= 3; i++ {
|
||
|
|
file := filepath.Join(tmplDir, filepath.Base(tmpl)+".html")
|
||
|
|
if err := os.WriteFile(file, []byte("content "+tmpl), 0644); err != nil {
|
||
|
|
t.Fatalf("Failed to create file: %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Initialize templates
|
||
|
|
if err := InitializeTemplates(defaultDir, targetDir); err != nil {
|
||
|
|
t.Fatalf("InitializeTemplates failed: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Verify all templates were copied
|
||
|
|
for _, tmpl := range templates {
|
||
|
|
tmplDir := filepath.Join(targetDir, tmpl)
|
||
|
|
if _, err := os.Stat(tmplDir); os.IsNotExist(err) {
|
||
|
|
t.Errorf("Template directory %s was not copied", tmpl)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|