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) }