test(09-03): add failing test for cross-source Dedup
This commit is contained in:
55
pkg/recon/dedup_test.go
Normal file
55
pkg/recon/dedup_test.go
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
package recon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/salvacybersec/keyhunter/pkg/engine"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestDedupEmpty(t *testing.T) {
|
||||||
|
require.Nil(t, Dedup(nil))
|
||||||
|
require.Nil(t, Dedup([]engine.Finding{}))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDedupNoDuplicates(t *testing.T) {
|
||||||
|
in := []engine.Finding{
|
||||||
|
{ProviderName: "openai", KeyMasked: "sk-abc12...9xyz", Source: "https://example.com/a"},
|
||||||
|
{ProviderName: "anthropic", KeyMasked: "sk-ant-1...2def", Source: "https://example.com/b"},
|
||||||
|
{ProviderName: "cohere", KeyMasked: "co-abcde...wxyz", Source: "https://example.com/c"},
|
||||||
|
}
|
||||||
|
out := Dedup(in)
|
||||||
|
require.Len(t, out, 3)
|
||||||
|
require.Equal(t, in, out, "order must be preserved")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDedupAllDuplicates(t *testing.T) {
|
||||||
|
f := engine.Finding{ProviderName: "openai", KeyMasked: "sk-abc12...9xyz", Source: "https://example.com/a"}
|
||||||
|
out := Dedup([]engine.Finding{f, f, f})
|
||||||
|
require.Len(t, out, 1)
|
||||||
|
require.Equal(t, f, out[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDedupPreservesFirstSeen(t *testing.T) {
|
||||||
|
first := time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC)
|
||||||
|
second := time.Date(2026, 2, 2, 0, 0, 0, 0, time.UTC)
|
||||||
|
in := []engine.Finding{
|
||||||
|
{ProviderName: "openai", KeyMasked: "sk-abc12...9xyz", Source: "https://example.com/a", DetectedAt: first, Confidence: "high"},
|
||||||
|
{ProviderName: "openai", KeyMasked: "sk-abc12...9xyz", Source: "https://example.com/a", DetectedAt: second, Confidence: "low"},
|
||||||
|
}
|
||||||
|
out := Dedup(in)
|
||||||
|
require.Len(t, out, 1)
|
||||||
|
require.Equal(t, first, out[0].DetectedAt, "first-seen timestamp must win")
|
||||||
|
require.Equal(t, "high", out[0].Confidence, "first-seen metadata must win")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDedupDifferentSource(t *testing.T) {
|
||||||
|
in := []engine.Finding{
|
||||||
|
{ProviderName: "openai", KeyMasked: "sk-abc12...9xyz", Source: "https://example.com/a"},
|
||||||
|
{ProviderName: "openai", KeyMasked: "sk-abc12...9xyz", Source: "https://example.com/b"},
|
||||||
|
}
|
||||||
|
out := Dedup(in)
|
||||||
|
require.Len(t, out, 2, "same provider+masked but different Source URLs must both be kept")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user