Files
cv-site/internal/fileutil/fileutil.go
T

49 lines
1.2 KiB
Go
Raw Normal View History

package fileutil
import (
"fmt"
"os"
)
// FindDataFile locates a data file by searching up the directory tree.
// This is useful for tests that may run from different directory depths.
//
// It searches in the following order:
// 1. Current directory
// 2. One level up (../)
// 3. Two levels up (../../)
// 4. Three levels up (../../../)
//
// Example:
//
// path, err := fileutil.FindDataFile("data/cv-en.json")
// if err != nil {
// log.Fatal(err)
// }
func FindDataFile(filename string) (string, error) {
if filename == "" {
return "", fmt.Errorf("filename cannot be empty")
}
// Try current directory first
if _, err := os.Stat(filename); err == nil {
return filename, nil
}
// Try parent directories (for tests running from subdirectories)
paths := []string{
filename, // Current dir
"../" + filename, // One level up
"../../" + filename, // Two levels up (for tests in internal/handlers)
"../../../" + filename, // Three levels up
}
for _, path := range paths {
if _, err := os.Stat(path); err == nil {
return path, nil
}
}
return "", fmt.Errorf("file not found: %s (searched: current dir, ../, ../../, ../../../)", filename)
}