183 lines
4.6 KiB
Go
183 lines
4.6 KiB
Go
|
|
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")
|
||
|
|
}
|
||
|
|
}
|