diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-12 22:24:08 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-12 22:24:08 +0200 |
| commit | cfddc5696f4956081630e3d394ef3d8c652af02e (patch) | |
| tree | 30dc6e7de7fe28d6733c485adaddea1129533cfb /internal/platforms/linkedin/preview_test.go | |
| parent | 914d3fb1c0839f3a25c42769ea42cf424ae340c4 (diff) | |
release v1.2.5v1.2.5
Diffstat (limited to 'internal/platforms/linkedin/preview_test.go')
| -rw-r--r-- | internal/platforms/linkedin/preview_test.go | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/internal/platforms/linkedin/preview_test.go b/internal/platforms/linkedin/preview_test.go index 1df969b..f65da63 100644 --- a/internal/platforms/linkedin/preview_test.go +++ b/internal/platforms/linkedin/preview_test.go @@ -1,8 +1,14 @@ package linkedin import ( + "context" + "net/http" + "net/http/httptest" + "path/filepath" "strings" "testing" + + "codeberg.org/snonux/gos/internal/config" ) func TestPreviewExtract(t *testing.T) { @@ -33,3 +39,89 @@ func TestPreviewExtract(t *testing.T) { t.Errorf("expected imageURL '%s' but got '%s'", expectedImageURL, imageURL) } } + +func TestNewPreviewIgnoresForbiddenPage(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "blocked", http.StatusForbidden) + })) + defer srv.Close() + + prev, err := NewPreview(context.Background(), config.Args{ + CacheDir: t.TempDir(), + }, []string{srv.URL}) + if err != nil { + t.Fatalf("expected preview fetch failure to be non-fatal, got %v", err) + } + + title, sourceURL, ok := prev.TitleAndURL() + if !ok { + t.Fatal("expected preview to keep URL fallback") + } + if title != srv.URL { + t.Fatalf("expected fallback title %q, got %q", srv.URL, title) + } + if sourceURL != srv.URL { + t.Fatalf("expected source URL %q, got %q", srv.URL, sourceURL) + } + if _, ok := prev.Thumbnail(); ok { + t.Fatal("expected no thumbnail for forbidden preview page") + } +} + +func TestNewPreviewIgnoresForbiddenImage(t *testing.T) { + t.Parallel() + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/": + _, _ = w.Write([]byte(` +<!DOCTYPE html> +<html> +<head> + <title>Blocked image</title> +</head> +<body> + <img src="/blocked.jpg" alt="blocked"> +</body> +</html> +`)) + case "/blocked.jpg": + http.Error(w, "blocked", http.StatusForbidden) + default: + http.NotFound(w, r) + } + })) + defer srv.Close() + + cacheDir := t.TempDir() + prev, err := NewPreview(context.Background(), config.Args{ + CacheDir: cacheDir, + }, []string{srv.URL}) + if err != nil { + t.Fatalf("expected image download failure to be non-fatal, got %v", err) + } + + title, sourceURL, ok := prev.TitleAndURL() + if !ok { + t.Fatal("expected preview title and URL to be preserved") + } + if title != "Blocked image" { + t.Fatalf("expected title %q, got %q", "Blocked image", title) + } + if sourceURL != srv.URL { + t.Fatalf("expected source URL %q, got %q", srv.URL, sourceURL) + } + if thumbnailPath, ok := prev.Thumbnail(); ok { + t.Fatalf("expected no thumbnail after blocked download, got %q", thumbnailPath) + } + + matches, err := filepath.Glob(filepath.Join(cacheDir, "*")) + if err != nil { + t.Fatalf("glob failed: %v", err) + } + if len(matches) != 0 { + t.Fatalf("expected cache dir to stay empty, got %v", matches) + } +} |
