summaryrefslogtreecommitdiff
path: root/internal/platforms/linkedin/preview_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-12 22:24:08 +0200
committerPaul Buetow <paul@buetow.org>2026-03-12 22:24:08 +0200
commitcfddc5696f4956081630e3d394ef3d8c652af02e (patch)
tree30dc6e7de7fe28d6733c485adaddea1129533cfb /internal/platforms/linkedin/preview_test.go
parent914d3fb1c0839f3a25c42769ea42cf424ae340c4 (diff)
release v1.2.5v1.2.5
Diffstat (limited to 'internal/platforms/linkedin/preview_test.go')
-rw-r--r--internal/platforms/linkedin/preview_test.go92
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)
+ }
+}