diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4106e66..c63652d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,6 +30,13 @@ jobs: - name: Verify dependencies run: go mod verify + - name: Install Chrome for PDF tests + run: | + wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' + sudo apt-get update + sudo apt-get install -y google-chrome-stable + - name: Run linter uses: golangci/golangci-lint-action@v7 with: diff --git a/internal/models/cv.go b/internal/models/cv.go index a047cf7..997950e 100644 --- a/internal/models/cv.go +++ b/internal/models/cv.go @@ -214,6 +214,30 @@ type ShortcutItem struct { Description string `json:"description"` } +// findDataFile locates a data file by searching up the directory tree +func findDataFile(filename string) (string, error) { + // 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) +} + // LoadCV loads CV data from a JSON file for the specified language func LoadCV(lang string) (*CV, error) { if lang != "en" && lang != "es" { @@ -221,7 +245,12 @@ func LoadCV(lang string) (*CV, error) { } filename := fmt.Sprintf("data/cv-%s.json", lang) - data, err := os.ReadFile(filename) + filepath, err := findDataFile(filename) + if err != nil { + return nil, err + } + + data, err := os.ReadFile(filepath) if err != nil { return nil, fmt.Errorf("error reading file %s: %w", filename, err) } @@ -252,7 +281,12 @@ func LoadUI(lang string) (*UI, error) { } filename := fmt.Sprintf("data/ui-%s.json", lang) - data, err := os.ReadFile(filename) + filepath, err := findDataFile(filename) + if err != nil { + return nil, err + } + + data, err := os.ReadFile(filepath) if err != nil { return nil, fmt.Errorf("error reading file %s: %w", filename, err) }