1package adapter
2
3import (
4 "sync/atomic"
5 "testing"
6
7 "github.com/rs/zerolog"
8)
9
10func TestFaviconWarningDedup_FirstAndRepeated(t *testing.T) {
11 adapter := NewFaviconAdapter(nil, nil, FaviconAdapterConfig{})
12
13 first, suppressed := adapter.shouldLogWarningDedup("save-png:example.com")
14 if !first {
15 t.Fatalf("expected first warning to be logged")
16 }
17 if suppressed != 0 {
18 t.Fatalf("expected no suppressed count on first warning, got %d", suppressed)
19 }
20
21 first, suppressed = adapter.shouldLogWarningDedup("save-png:example.com")
22 if first {
23 t.Fatalf("expected repeated warning to be suppressed")
24 }
25 if suppressed != 1 {
26 t.Fatalf("expected suppressed count to be 1, got %d", suppressed)
27 }
28
29 first, suppressed = adapter.shouldLogWarningDedup("save-png:example.com")
30 if first {
31 t.Fatalf("expected repeated warning to remain suppressed")
32 }
33 if suppressed != 2 {
34 t.Fatalf("expected suppressed count to be 2, got %d", suppressed)
35 }
36}
37
38func TestFaviconWarningDedup_ClearResetsState(t *testing.T) {
39 adapter := NewFaviconAdapter(nil, nil, FaviconAdapterConfig{})
40 key := "sized-png:example.com"
41
42 first, _ := adapter.shouldLogWarningDedup(key)
43 if !first {
44 t.Fatalf("expected first warning to be logged")
45 }
46
47 adapter.clearWarningDedup(key)
48
49 first, suppressed := adapter.shouldLogWarningDedup(key)
50 if !first {
51 t.Fatalf("expected warning to log again after clear")
52 }
53 if suppressed != 0 {
54 t.Fatalf("expected suppressed count reset after clear, got %d", suppressed)
55 }
56}
57
58func TestFaviconWarningDedup_LogWarningDedupInvokesCallbackOnce(t *testing.T) {
59 adapter := NewFaviconAdapter(nil, nil, FaviconAdapterConfig{})
60 key := "save-png:example.com"
61 var calls atomic.Int32
62
63 adapter.logWarningDedup(t.Context(), key, nil, func(_ *zerolog.Logger, _ error) {
64 calls.Add(1)
65 })
66 adapter.logWarningDedup(t.Context(), key, nil, func(_ *zerolog.Logger, _ error) {
67 calls.Add(1)
68 })
69
70 if got := calls.Load(); got != 1 {
71 t.Fatalf("expected warning callback to run once, got %d", got)
72 }
73}