Address review feedback on PR #13: - Remove docs/superpowers/plans/ files not related to issue #4 - gofmt internal/mail/resolve_thread_test.go Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package mail
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"thuanle.me/claw-email-bridge/internal/database"
|
|
)
|
|
|
|
func TestResolveThreadID_NoHeaders_ReturnsMessageID(t *testing.T) {
|
|
got := resolveThreadID("msg-1", "", "", nilLookup)
|
|
if got != "msg-1" {
|
|
t.Fatalf("expected msg-1, got %s", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveThreadID_InReplyToMatches_ReturnsParentThreadID(t *testing.T) {
|
|
lookup := func(messageID string) (*database.Task, error) {
|
|
if messageID == "<parent>" {
|
|
return &database.Task{ThreadID: "thread-abc"}, nil
|
|
}
|
|
return nil, nil
|
|
}
|
|
got := resolveThreadID("msg-2", "<parent>", "", lookup)
|
|
if got != "thread-abc" {
|
|
t.Fatalf("expected thread-abc, got %s", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveThreadID_ReferencesOnly_LastIDMatches(t *testing.T) {
|
|
lookup := func(messageID string) (*database.Task, error) {
|
|
if messageID == "<C>" {
|
|
return &database.Task{ThreadID: "thread-c"}, nil
|
|
}
|
|
return nil, nil
|
|
}
|
|
got := resolveThreadID("msg-3", "", "<A> <B> <C>", lookup)
|
|
if got != "thread-c" {
|
|
t.Fatalf("expected thread-c, got %s", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveThreadID_ReferencesOnly_MiddleIDMatches(t *testing.T) {
|
|
lookup := func(messageID string) (*database.Task, error) {
|
|
if messageID == "<B>" {
|
|
return &database.Task{ThreadID: "thread-b"}, nil
|
|
}
|
|
return nil, nil
|
|
}
|
|
got := resolveThreadID("msg-4", "", "<A> <B> <C>", lookup)
|
|
if got != "thread-b" {
|
|
t.Fatalf("expected thread-b, got %s", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveThreadID_ReferencesOnly_NoMatch_ReturnsMessageID(t *testing.T) {
|
|
got := resolveThreadID("msg-5", "", "<X> <Y>", nilLookup)
|
|
if got != "msg-5" {
|
|
t.Fatalf("expected msg-5, got %s", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveThreadID_InReplyToMiss_ReferencesMatches(t *testing.T) {
|
|
lookup := func(messageID string) (*database.Task, error) {
|
|
if messageID == "<ref>" {
|
|
return &database.Task{ThreadID: "thread-ref"}, nil
|
|
}
|
|
return nil, nil
|
|
}
|
|
got := resolveThreadID("msg-6", "<unknown>", "<ref>", lookup)
|
|
if got != "thread-ref" {
|
|
t.Fatalf("expected thread-ref, got %s", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveThreadID_LookupError_ReturnsMessageID(t *testing.T) {
|
|
lookup := func(messageID string) (*database.Task, error) {
|
|
return nil, errors.New("db error")
|
|
}
|
|
got := resolveThreadID("msg-7", "<parent>", "", lookup)
|
|
if got != "msg-7" {
|
|
t.Fatalf("expected msg-7, got %s", got)
|
|
}
|
|
}
|
|
|
|
var nilLookup = func(string) (*database.Task, error) { return nil, nil }
|