PDF generation and downloads are working

This commit is contained in:
2025-12-21 09:15:08 +01:00
parent 2af477397e
commit cd0f98042d
10 changed files with 739 additions and 131 deletions
+182
View File
@@ -0,0 +1,182 @@
package pdfrender
import (
"os"
"path/filepath"
"testing"
"time"
)
func setupTestEnvironment(t *testing.T) {
original := os.Getenv("ENVIRONMENT")
os.Setenv("ENVIRONMENT", "test")
t.Cleanup(func() {
if original != "" {
os.Setenv("ENVIRONMENT", original)
} else {
os.Unsetenv("ENVIRONMENT")
}
})
}
func TestSanitizeFilename(t *testing.T) {
setupTestEnvironment(t)
tests := []struct {
name string
input string
expected string
}{
{
name: "Simple name",
input: "Character",
expected: "Character",
},
{
name: "Name with spaces",
input: "Fanjo Vetrani",
expected: "Fanjo_Vetrani",
},
{
name: "Name with umlauts",
input: "Müller Ökonom",
expected: "Mueller_Oekonom",
},
{
name: "Name with special chars",
input: "Test/Character\\Name:With*Special?Chars",
expected: "Test_Character_Name_With_Special_Chars",
},
{
name: "Multiple consecutive spaces",
input: "Test Name",
expected: "Test_Name",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := SanitizeFilename(tt.input)
if result != tt.expected {
t.Errorf("SanitizeFilename(%q) = %q, want %q", tt.input, result, tt.expected)
}
})
}
}
func TestGenerateExportFilename(t *testing.T) {
setupTestEnvironment(t)
// Test with a fixed timestamp
timestamp := time.Date(2023, 12, 25, 14, 30, 45, 0, time.UTC)
filename := GenerateExportFilename("Fanjo Vetrani", timestamp)
expectedPrefix := "Fanjo_Vetrani_20231225_143045"
if filename != expectedPrefix+".pdf" {
t.Errorf("GenerateExportFilename() = %q, want prefix %q", filename, expectedPrefix)
}
// Test with special characters
filename2 := GenerateExportFilename("Test/Char*Name", timestamp)
expectedPrefix2 := "Test_Char_Name_20231225_143045"
if filename2 != expectedPrefix2+".pdf" {
t.Errorf("GenerateExportFilename() = %q, want prefix %q", filename2, expectedPrefix2)
}
}
func TestEnsureExportTempDir(t *testing.T) {
setupTestEnvironment(t)
// Use a test-specific temp directory
testDir := filepath.Join(os.TempDir(), "bamort_test_xporttemp")
defer os.RemoveAll(testDir)
// First call should create the directory
err := EnsureExportTempDir(testDir)
if err != nil {
t.Fatalf("EnsureExportTempDir() error = %v", err)
}
// Verify directory exists
info, err := os.Stat(testDir)
if err != nil {
t.Fatalf("Directory not created: %v", err)
}
if !info.IsDir() {
t.Error("Path exists but is not a directory")
}
// Second call should succeed (directory already exists)
err = EnsureExportTempDir(testDir)
if err != nil {
t.Errorf("EnsureExportTempDir() on existing directory error = %v", err)
}
}
func TestCleanupOldFiles(t *testing.T) {
setupTestEnvironment(t)
// Create test directory
testDir := filepath.Join(os.TempDir(), "bamort_test_cleanup")
os.RemoveAll(testDir)
defer os.RemoveAll(testDir)
if err := os.MkdirAll(testDir, 0755); err != nil {
t.Fatalf("Failed to create test directory: %v", err)
}
// Create test files with different ages
now := time.Now()
// Old file (8 days old)
oldFile := filepath.Join(testDir, "old_file.pdf")
if err := os.WriteFile(oldFile, []byte("old"), 0644); err != nil {
t.Fatalf("Failed to create old file: %v", err)
}
oldTime := now.Add(-8 * 24 * time.Hour)
if err := os.Chtimes(oldFile, oldTime, oldTime); err != nil {
t.Fatalf("Failed to set old file time: %v", err)
}
// Recent file (3 days old)
recentFile := filepath.Join(testDir, "recent_file.pdf")
if err := os.WriteFile(recentFile, []byte("recent"), 0644); err != nil {
t.Fatalf("Failed to create recent file: %v", err)
}
recentTime := now.Add(-3 * 24 * time.Hour)
if err := os.Chtimes(recentFile, recentTime, recentTime); err != nil {
t.Fatalf("Failed to set recent file time: %v", err)
}
// New file (1 hour old)
newFile := filepath.Join(testDir, "new_file.pdf")
if err := os.WriteFile(newFile, []byte("new"), 0644); err != nil {
t.Fatalf("Failed to create new file: %v", err)
}
// Cleanup files older than 7 days
count, err := CleanupOldFiles(testDir, 7*24*time.Hour)
if err != nil {
t.Fatalf("CleanupOldFiles() error = %v", err)
}
if count != 1 {
t.Errorf("CleanupOldFiles() deleted %d files, want 1", count)
}
// Verify old file is deleted
if _, err := os.Stat(oldFile); !os.IsNotExist(err) {
t.Error("Old file should be deleted")
}
// Verify recent file still exists
if _, err := os.Stat(recentFile); err != nil {
t.Error("Recent file should still exist")
}
// Verify new file still exists
if _, err := os.Stat(newFile); err != nil {
t.Error("New file should still exist")
}
}